CakePHP 3 contiennent des champs
J'ai le texte suivant DB tables: les objets, les utilisateurs, les groupes, les itemImages.
Il ya beaucoup de nombreuses relations entre les éléments, groupes) et (utilisateurs, groupes), et un à plusieurs entre les éléments, itemImages).
Toutes les clés étrangères ont été mis en place dans CakePHP que les associations.
Comment puis-je construire une requête à contenir() qui sélectionne tous les éléments et de leurs principales de l'image, qui sont dans un groupe qui a été affecté en tant que groupe principal d'un utilisateur avec un id particulier?
Pour le rendre plus clair, voici ce qu'une simple requête SQL:
SELECT items.id AS itemId, items.name, itemImages.url AS itemUrl
FROM items
INNER JOIN groups_items ON groups_items.item_id = items.id
INNER JOIN groups ON groups_images.group_id = groups.id
INNER JOIN groups_users ON groups_users.group_id = groups.id
INNER JOIN users ON groups_users.user_id = users.id
INNER JOIN itemImages ON itemImages.item_id = items.id
WHERE groups_users.isMainGroup = 1
AND users.id = :userId
AND itemImages.isMainImage = 1
CakePHP code que j'ai pour le moment:
$items = $this->Items->find()
->hydrate(false)
->contain([
'Groups.Users' => function($q) use ($userId){
return $q->where(['isMainGroup' => 1, 'Users.id' => $userId]);
},
'ItemImages' => function($q){
return $q->where(['isMainImage' => 1]);
},
]);
//->select(['itemId' => 'Items.id', 'Items.name', 'itemUrl' => 'itemImages.url']);
OriginalL'auteur user1507558 | 2015-04-18
Vous devez vous connecter pour publier un commentaire.
correspondance (en) méthode peut aider avec ce
Je pense que, dans ce cas, le dernier contenir un énoncé peut être omis, car le résultat désiré est déjà dans _matchingData propriété.
Note sur district() stament:
http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#filtering-by-associated-data
Le commentaire sur le
distinct
déclaration est très utile.OriginalL'auteur Roman T.