Bonjour la communauté !

Je tombe sur un os, puisqu'un bug apparait uniquement sur mon site en ligne, mais pas sur mon site en version locale (via wampserveur) !

Je cherche tout simplement à faire une petite requete de statistique :
Mon controller :

public function statistiques() {
    $query = $this->Articles->find();
    $query->contain(['Choixprix', 'Choixstyles','Choixcategories']);
     $query->select(['choixcategories.categorie','choixcategories.id', 'choixstyles.style', 'choixstyles.id', 'choixprix.prix', 'choixprix.id' ,'total_articles' => $query->func()->count('Articles.id')])
    ->group(['choixcategorie_id', 'choixstyle_id', 'choixprix_id']);
    $this->set('tableaustat', $query);
 }

et mon layout :

<table class='table table-sm'>
  <tr>
    <th class="text-center">Catégorie</th>
    <th class="text-center">Style</th>
    <th class="text-center">Prix</th>
    <th class="text-center">Nombre</th>
  </tr>

<?php foreach ($tableaustat as $stat): ?>
  <!-- <?php debug($stat); ?> -->
  <tr>
    <td class="text-center"><?= $stat->choixcategories['categorie']; ?></td>
    <td class="text-center"><?= $stat->choixstyles['style']; ?></td>
    <td class="text-center"><?= $stat->choixprix['prix']; ?></td>
    <td class="text-center"><?= $this->Html->link($stat->total_articles, array('controller'=>'Articles','action'=>'index','?' => ['cat' => $stat->choixcategories['id'], 'style' => $stat->choixstyles['id'], 'prix' => $stat->choixprix['id']])); ?></td>
  </tr>
<?php endforeach; ?>
</table>

et donc le bug sur mon serveur de prod : Il n'arrive pas à trouver de champ 'choixcategories' !
Mes 2 bases de données sont pourtant identiques (coté serveur et coté locale)

Avez vous une idée ?

Raphaël

2 réponses


eRaph
Auteur
Réponse acceptée

Effectivement, c'était bien ça : je n'ai pas le droit d'utiliser select pour choisir les champs des tables associées...
Du coup, j'ai mis ça :

    $query->contain([
      'Choixprix' => ['fields' => ['Choixprix.id', 'Choixprix.prix']],
      'Choixstyles' => ['fields' => ['Choixstyles.id', 'Choixstyles.style']],
      'Choixcategories' => ['fields' => ['Choixcategories.id', 'Choixcategories.categorie']]]);

    $query->select(['total_articles' => $query->func()->count('Articles.id')])
      ->group(['choixcategorie_id', 'choixstyle_id', 'choixprix_id']);

et ça marche !

eRaph
Auteur

J'ai l'impression que le bug vient de la ligne suivante :

 $query->select(['choixcategories.categorie','choixcategories.id', 'choixstyles.style', 'choixstyles.id', 'choixprix.prix', 'choixprix.id' ,'total_articles' => $query->func()->count('Articles.id')])
    ->group(['choixcategorie_id', 'choixstyle_id', 'choixprix_id']);

Je n'ai à priori pas le droit d'utiliser 'select' pour les champs de mes tables jointes : 'choixcategories.categorie','choixcategories.id', 'choixstyles.style'

Quelqu'un à une idée comment faire ?