CakePHP - использовать метод find () - PullRequest
0 голосов
/ 23 ноября 2011

У меня есть модель Artist и модель Product. Их ассоциации таковы:

Artist hasMany Product
Product belongsTo Artist

У Artist может не быть Products. Как использовать метод find(), чтобы перечислить всех артистов вместе с количеством Products, которое у них есть?

Ответы [ 4 ]

1 голос
/ 23 ноября 2011

Вы можете использовать простой вызов 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']);
}
1 голос
/ 23 ноября 2011

Из контроллера Artist вы можете сделать это:

$this->Artist->find('all')

Для доступа к нему в представлении вам нужно использовать set () следующим образом:

$this->set('artists', $this->Artist->find('all'));

Затем вы можете просмотреть данные, выполнив print_r($artists); в представлении.

1 голос
/ 23 ноября 2011

пока ваши отношения установлены правильно, это все, что вам нужно сделать.

$results = $ArtistModel->find('all');
0 голосов
/ 23 ноября 2011

Вы можете использовать функцию 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'
));

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...