【发布时间】:2019-08-20 07:04:56
【问题描述】:
我正在使用以下(有效的)MySQL 查询来获取 collection_keyword 的所有 collection_items 的计数
SELECT ck.id
, ck.working_title
, count(*) as matches
FROM collection_keywords ck
JOIN collection_keywords_collection_items ckci
ON ckci.collection_keyword_id = ck.id
JOIN nl_collection_items nci
ON nci.id = ckci.collection_item_id
GROUP
BY ck.id
SQL 小提琴:http://sqlfiddle.com/#!9/7b4b0a/1
返回以下信息
+----+---------------+---------+
| id | working_title | matches |
+----+---------------+---------+
| 1 | First Title | 5 |
| 2 | Second Title | 10 |
| 3 | Third Title | 15 |
+----+---------------+---------+
我正在尝试使用 CakePHP 2.9 复制此查询,但使用 join 方法
结果返回空
这是我的 CakePHP 代码
$collectionKeywords = $this->CollectionKeyword->find('all', array(
'contain' => array(),
'fields' => array('CollectionKeyword.id, CollectionKeyword.working_title', 'count(*) AS matches'),
'joins' => array(
array(
'table' => 'collection_keywords_collection_items',
'type' => 'INNER',
'conditions' => array(
'collection_keywords_collection_items.collection_keyword_id' => 'CollectionKeyword.id'
)
)
),
'group' => 'CollectionKeyword.id',
));
关系定义如下
class CollectionKeyword extends PluginCollectionKeyword
{
public $hasAndBelongsToMany = array(
'CollectionItem' => array(
'className' => 'CollectionItem',
'joinTable' => 'collection_keywords_collection_items',
'foreignKey' => 'collection_keyword_id',
'associationForeignKey' => 'collection_item_id',
)
);
}
还有CollectionItem关系
class CollectionItem extends PluginCollectionItem
{
public $hasAndBelongsToMany = array(
'CollectionKeyword' => array(
'className' => 'CollectionKeyword',
'joinTable' => 'collection_keywords_collection_items',
'foreignKey' => 'collection_item_id',
'associationForeignKey' => 'collection_keyword_id',
),
);
}
【问题讨论】:
-
添加了 SQLFiddle。谢谢@草莓
-
(实际上,在这种情况下可能不需要,但无论如何+1)
-
你使用的是哪个版本的 Cakephp?
-
我使用的是 2.9.8