首先让我注意,我是 MVC 框架的新手,所以不要假设在该领域有任何知识。
我有一个设计师模型,当我从设计师模型中检索信息时,我想为每个设计师提取相关产品。
关联并不简单,所以蛋糕不会为我神奇地做到这一点,所以我需要自己定义它。我一直在关注教程,我认为我很接近但不确定如何将它们联系在一起。
我有一个很长的查询,如果您在正确的位置插入designer_id,它将选择所有关联的产品。
我想我应该将此查询放在 Designer 模型中的某个位置,以便它知道如何检索产品。
这是查询,字符串中看起来像的部分{$__cakeID__$}
需要替换为designer_id
:
SELECT *, COUNT(DISTINCT tags.name) AS uniques
FROM products, products_tags, tags, designers, designers_tags
WHERE products.id = products_tags.product_id
AND tags.id = products_tags.tag_id
AND tags.id IN (
SELECT t.id
FROM tags t
LEFT JOIN designers_tags dt ON dt.tag_id = t.id
LEFT JOIN designers d ON d.id = dt.designer_id
WHERE d.id ={$__cakeID__$}
AND dt.include =1
)
AND products.id NOT IN (
SELECT products.id
FROM products, products_tags, tags
WHERE products.id = products_tags.product_id
AND tags.id = products_tags.tag_id
AND tags.id IN (
SELECT t.id
FROM tags t
LEFT JOIN designers_tags dt ON dt.tag_id = t.id
LEFT JOIN designers d ON d.id = dt.designer_id
WHERE d.id ={$__cakeID__$}
AND dt.include =0
)
)
AND designers.id = designers_tags.designer_id
AND designers_tags.tag_id = tags.id
GROUP BY products.id
HAVING uniques = (
SELECT COUNT(d.id) AS tag_count
FROM tags t
LEFT JOIN designers_tags dt
ON dt.tag_id = t.id
LEFT JOIN designers d
ON d.id = dt.designer_id
WHERE d.id = {$__cakeID__$}
AND dt.include =1
GROUP BY d.id
)
这里还有设计师模型:
class Designer extends AppModel
{
var $name = 'Designer';
var $actsAs = array('Sluggable' => array('separator' => '-', 'overwrite' => false, 'label' => 'name'));
var $hasAndBelongsToMany = 'Tag';
var $hasOne = 'AlternateName';
var $hasMany = 'Vote';
}
我需要做什么才能让 Designer 模型使用此查询来自动查找其关联产品?