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