CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 27-02-2015 18:45:51

Jérémy_B
Chouquette
Date d'inscription: 27-02-2015
Messages: 2

[Edit] : Utiliser champ d'un Contain dans Where

EDIT : nouvelle requête, plus simple.

Bonjour,

Voici la requête fonctionnant dans phpMyAdmin :

Code: php

  1. SELECT SeanceUsers.id AS `SeanceUsers__id`,
  2. SeanceUsers.user_id AS `SeanceUsers__user_id`,
  3. SeanceUsers.content AS `SeanceUsers__content`,
  4. SeanceUsers.level AS `SeanceUsers__level`,
  5. SeanceUsers.intensity AS `SeanceUsers__intensity`,
  6. SeanceUsers.duration AS `SeanceUsers__duration`,
  7. SeanceUsers.help AS `SeanceUsers__help`,
  8. SeanceUsers.observation AS `SeanceUsers__observation`,
  9. SeanceUsers.views_count AS `SeanceUsers__views_count`,
  10. SeanceUsers.comments_count AS `SeanceUsers__comments_count`,
  11. SeanceUsers.created AS `SeanceUsers__created`,
  12. SeanceUsers.modified AS `SeanceUsers__modified`,
  13. Users.id AS `Users__id`,
  14. Users.last_seance_id AS `Users__last_seance_id`,
  15. Users.username AS `Users__username`,
  16. Users.avatar AS `Users__avatar`,
  17. Users.slug AS `Users__slug`,
  18. Users.objectif AS `Users__objectif`,
  19. Users.weight AS `Users__weight`,
  20. Users.size AS `Users__size`
  21. FROM seance_users SeanceUsers
  22. LEFT JOIN users Users ON Users.id = (SeanceUsers.user_id)
  23. WHERE SeanceUsers.id = Users.last_seance_id
  24. ORDER BY SeanceUsers.created desc

Le but étant d'afficher seulement la dernière séance de chaque membre. Car un membre peut avoir plusieurs séances, mais à l'affichage sur l'index, j'aimerai lister que la séance la plus récente de chaque membre.

J'enregistre donc la dernière séance (last_seance_id) dans la table user.

Malheureusement, je n'arrive pas utiliser un champs se trouvant dans un contain. Pour l'instant, je n'ai que ceci :

Code: php

  1. // SeanceController.php
  2. $this->loadModel('SeanceUsers');
  3. $seances = $this->SeanceUsers
  4.             ->find()
  5.             //->autoFields(true)
  6.             ->contain([
  7.                 'Users' => function ($q) {
  8.                     return $q->select(['id' ,'last_seance_id', 'username', 'avatar', 'slug', 'objectif', 'weight', 'size']);
  9.                 }
  10.             ])
  11.             ->where([
  12.                 'SeanceUsers.id' => 'Users.last_seance_id'
  13.             ])
  14.             ->order([
  15.                 'SeanceUsers.created' => 'desc'
  16.             ]);

Ce qui me donne en SQL  :c0 à la place de Users.last_seance_id, il ne prend pas en compte mon champs:

Code: php

  1. 'params' => [
  2.     ':c0' => [
  3.       'value' => 'Users.last_seance_id',
  4.       'type' => 'integer',
  5.       'placeholder' => 'c0'
  6.     ]
  7.   ]

Donc comment utiliser un champs se trouvant dans un contain (dans user, je veux last_seance id) pour le comparer par la suite avec l'id de la séance ?

Merci d'avance.

Dernière modification par Jérémy_B (01-03-2015 15:29:13)

Hors ligne

 

#2 01-03-2015 15:29:44

Jérémy_B
Chouquette
Date d'inscription: 27-02-2015
Messages: 2

Re: [Edit] : Utiliser champ d'un Contain dans Where

Petit Up s'il vous plait. J'ai éditer complètement mon message ci-dessus car j'ai revu toute ma requête SQL.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr