CakePHP - 使用find()方法

时间:2011-11-23 16:38:17

标签: php sql cakephp

我有Artist模型和Product模型。他们的协会如下:

Artist hasMany Product
Product belongsTo Artist

Artist可能没有任何Products。如何使用find()方法列出所有艺术家以及他们拥有的Products个数?

4 个答案:

答案 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'
));

希望这有帮助