我有Artist
模型和Product
模型。他们的协会如下:
Artist hasMany Product
Product belongsTo Artist
Artist
可能没有任何Products
。如何使用find()
方法列出所有艺术家以及他们拥有的Products
个数?
答案 0 :(得分:1)
只要你的关系设置得当,这就是你需要做的全部。
$results = $ArtistModel->find('all');
答案 1 :(得分:1)
从艺术家控制器中你可以这样做:
$this->Artist->find('all')
要在视图中访问它,您需要使用set(),如下所示:
$this->set('artists', $this->Artist->find('all'));
然后,您可以在视图中执行print_r($artists);
来查看数据。
答案 2 :(得分:1)
您可以像这样使用简单的find
调用:
$artists = $this->Artist->find('all');
返回和数组如下:
array(
[0] => array(
[Artist] => array(
'id' => 1,
'other_field' => 'other_value',
...
),
[Product] => array(
[0] => array(
'id' => 1,
...
),
[1] => array(
'id' => 2,
...
)
)
)
[1] => array(
[Artist] => array(
'id' => 2,
'other_field' => 'other_value',
...
),
[Product] => array(...)
)
)
然后,您可以迭代结果并获得所需的信息:
foreach ( $artists as $artist ) {
echo $artist['Artist']['name'];
echo count($artist['Product']);
}
答案 3 :(得分:0)
您可以使用counterCache功能在缓存中存储每位艺术家的产品数量。
或者如果你愿意,你可以(手动)使用ORM,它应该是这样的:
$this->Artist->find('all',array('fields'=>array('Artist.*','COUNT(Product.id) as count_products')
'joins'=>array(array('table' => 'products',
'alias' => 'Product',
'type' => 'INNER',
'conditions' => array('Artist.id = Product.artist_id'))),
'group'=>'Artist.id'
));
希望这有帮助