我在模特中遇到了cakephp协会的问题。
我必须选择至少有一个hasMany reation行的记录
模型
class Category extends AppModel
{
public $hasMany = array(
'Product' => array(
'className' => 'Product',
'foreignKey' => 'CategoryId',
)
);
}
查询
$categories = $this->Category->find('all');
我只需要至少包含一个产品条目的类别
分类如:衬衫,鞋类,眼镜等
产品如:
小,中,大(衬衫) 带框架,防紫外线(玻璃)
所以,我想要获得衬衫和眼镜类别只是因为上面的例子没有鞋类产品
答案 0 :(得分:3)
请参阅 CakePHP - Find and count how many associated records exist
具有最佳性能的最简单方法是使用正确索引的计数器缓存字段,如链接答案中所示。
链接的答案与联接不完全相同,这里有一些额外的信息,而不是HAVING COUNT
与您使用IS NOT NULL
条件的联接。这是一个(未经测试的)示例:
$this->Category->find('all', array(
'joins' => array(
array(
'table' => 'products',
'alias' => 'Product',
'type' => 'LEFT',
'conditions' => array('Category.id = Product.CategoryId')
)
),
'conditions' => array(
'Product.CategoryId IS NOT NULL'
)
'group' => 'Category.id'
));
根据使用的DBMS和版本,您可以使用内部联接获得更好的性能:
$this->Category->find('all', array(
'joins' => array(
array(
'table' => 'products',
'alias' => 'Product',
'type' => 'INNER',
'conditions' => array('Category.id = Product.CategoryId')
)
),
'group' => 'Category.id'
));