【发布时间】:2015-06-25 17:02:54
【问题描述】:
我有以下数据库表:项目、用户、组、itemImages。 (items, groups) 和 (users, groups) 之间存在多对多关系,(items, itemImages) 之间存在一对多关系。 所有适当的外键都已在 CakePHP 中设置为关联。
如何使用 contains() 构造一个查询,该查询选择所有项目及其主图像,这些项目位于一个组中,该组已作为主组分配给具有特定 ID 的用户?
为了更清楚,下面是一个普通的 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 代码:
$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']);
【问题讨论】:
标签: php mysql cakephp orm cakephp-3.0