Bonjour,

Voilà j'avais une question.

Ce que je veux

J'ai un menu qui se présente par exemple, comme ceci :
Recettes | Entrées | Plats | Desserts

Avec mon lien 'Recettes', je vais chercher toutes les recettes de la base de données.
Et comme on peut le comprendre, les autres liens devraient aller chercher les recettes correspondantes à chaque catégorie.

Pour toutes les recettes, je vais les chercher avec ce code :

$id = isset($_GET['id']) ? $_GET['id'] : 1;
$details = App::getInstance()->getTable('Recette')->getDetailRecette($id);

et la fonction getDetailRecette() où j'ai ajouté le WHERE :

    public function getDetailRecette($id)
    {
        return $this->query("
            SELECT C.categories, C.id, R.recettes, R.nbpersonnes, marge, observations, I.ingredients, quantites, I.prix
            FROM categories C
                JOIN recettes R
                    ON C.id=R.categories_id
                JOIN composition_recettes CR
                    ON R.id=CR.recettes_id 
                JOIN ingredients I
                    ON I.id=CR.ingredients_id
                WHERE CR.recettes_id = $id
            ORDER BY ingredients ASC
        ");
    }

Donc par exemple, pour obtenir toutes les entrées, je pensais ré-utiliser la page 'Recettes' avec le code indiqué, mais en y ajoutant le ORDER BY soit par 'nom' soit par 'id' pour qu'il ne m'affiche que les Entrées de la base de données.

Je me demandais si je pouvais faire ça dans la requête $details ou si je devais ajouter une nouvelle méthode ou modifier la méthode getTable() ?

Merci pour votre analyse et votre aide !

2 réponses


Salut,

Je ne comprends pas un truc : tu dis que le lien "Recettes" affiche toutes les recette, et dans ta query tu filtres par ID ce qui implique que tu ne récupères que UNE recette. Il y a pas quelque chose qui cloche d'après toi ? ^^'

Zulkar
Auteur

Bonjour,
C'est parce que je n'ai pas mis le code de toute ma page. Tu comprendras sans doute mieux !
Mon lien affiche bien toutes mes recettes dans un tableau.
Et comme tu pourras le voir dans le code, j'ai d'autres tableaux, qui doivent m'afficher le détail de chaque recette.
Donc le filtre par l'ID que tu vois, c'est pour faire cette fonction !
Par défaut, cela m'affiche la recette avec l'ID 1 et cela rempli mes tableaux avec le détail correspondant.
Et lorsque je clique sur une autre recette, tout le détail s'adapte.
J'espère avoir été plus clair.

<?php
$id = isset($_GET['id']) ? $_GET['id'] : 1;
$details = App::getInstance()->getTable('Recette')->getDetailRecette($id);
// Calcul du coût de revient
$total = 0;
foreach( $details as $row ) {
    $total += ($row->quantites * $row->prix);
}
$coutRevient = ($total / $row->nbpersonnes);
$ttc = ($coutRevient * $row->marge);
$form = new \Core\HTML\BootstrapForm();
?>

  <!-- Content Wrapper. Contains page content -->
  <div class="content-wrapper">
    <!-- Content Header (Page header) -->

      <ol class="breadcrumb pull-right">
        <li><a href="index.php?p=home">Home</a></li>
        <li class="active">Recettes</li>
      </ol>

    <!-- Main content -->
    <section class="content">

        <div class="row">

          <div class="col-md-4">
            <div class="box box-danger">
                  <div class="box-header">
                    <h4 class="box-title">Liste des recettes</h4>
                  </div>
                  <!-- /.box-header -->
                  <div class="box-body">
                    <table id="recettes-table" class="table table-bordered table-striped" width="100%">
                      <thead>
                        <tr>
                          <th>Recettes</th>
                          <th width="30%">Actions</th>
                        </tr>
                      </thead>
                      <tbody>
                      <?php foreach (App::getInstance()->getTable('Recette')->all() as $recette): ?>
                        <tr>
                          <td class="current" onclick="location.href='index.php?p=recettes&id=<?= $recette->id; ?>'"><?= $recette->recettes; ?></td>
                          <td>
                            <!-- Bouton Editer -->
                            <a href="?p=recette.edit&id=<?= $recette->id; ?>" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-pencil"></span></a>
                            <!-- Bouton Imprimer -->
                            <a href="#" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-print"></span></a>
                            <!-- Bouton Supprimer -->
                            <form action="?p=recette.delete" method="post" style="display: inline;">
                              <input type="hidden" name="id" value="<?= $recette->id ?>">
                              <button type="submit" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-trash"></span></button>
                            </form>
                          </td>
                        </tr>
                      <?php endforeach; ?>
                      </tbody>
                    </table>
                  </div>
                  <!-- /.box-body -->
            </div>
          </div>
          <!-- /.box -->

          <div class="col-md-5">
            <div class="box box-danger">
                  <div class="box-header">
                    <h4 class="box-title">Détail des ingrédients</h4>
                  </div>
                  <!-- /.box-header -->
                  <div class="box-body no-padding">
                    <table id="recettes-table" class="table table-bordered table-striped" width="100%">
                      <thead>
                        <tr>
                          <th>Ingrédients</th>
                          <th width="15%">Qtés</th>
                          <th width="15%">Prix / kg</th>
                          <th width="15%">Coûts</th>
                        </tr>
                      </thead>
                      <tfoot>
                        <tr style="color:#990000;font-weight:700;">
                          <td colspan="3" align="right">Coût de revient de la recette HT - TOTAL</td>
                          <td><span id=""><?= round($total, 2) ?></span> &euro;</td>
                        </tr>
                      </tfoot>
                      <tbody>
                      <?php foreach ($details as $recette): ?>
                        <tr>
                          <td><?= $recette->ingredients; ?></td>
                          <td><?= $recette->quantites; ?></td>
                          <td><?= $recette->prix; ?> &euro;</td>
                          <td><?= round(($recette->quantites * $recette->prix), 3) ?> &euro;</td>
                        </tr>
                      <?php endforeach; ?>
                      </tbody>
                    </table>
                  </div>
                  <!-- /.box-body -->
            </div>
          </div>
          <!-- /.box -->

          <div class="col-md-3">
            <div class="box box-danger">
                  <div class="box-header">
                    <h4 class="box-title">Calculs</h4>
                  </div>
                  <!-- /.box-header -->
                  <div class="box-body no-padding">
                    <table id="recettes" class="table table-stripped table-bordered">
                            <tr>
                               <th width="70%">Nombre de personnes</th> 
                               <td><?= $recette->nbpersonnes; ?></td>
                            </tr>
                            <tr>
                               <th width="70%">Coût de revient / pers.</th>
                               <td><?= round($coutRevient, 2); ?> &euro;</td>
                            </tr>
                            <tr>
                               <th width="70%">Marge</th>
                               <td><?= $recette->marge; ?></td>
                            </tr>
                            <tr>
                               <th width="70%">Prix de vente TTC</th>
                               <td style="color:#990000;font-weight:700;"><?= round($ttc, 2); ?> &euro;</td>
                            </tr>
                        </table>
                  </div>
                  <!-- /.box-body -->
            </div>
          </div>
          <!-- /.box -->

          <div class="col-md-3">
            <div class="box box-danger">
                  <div class="box-header">
                    <h4 class="box-title">Observation(s)</h4>
                  </div>
                  <!-- /.box-header -->
                  <div class="box-body">
                    <!-- Observation -->
                    <?= $recette->observations; ?>
                    <!-- /.form group -->
                  </div>
                  <!-- /.box-body -->
            </div>
          </div>
            <!-- /.box -->

        </div>

    </section>
    <!-- /.content -->

  </div>
  <!-- /.content-wrapper -->