CakePHP: загрузка количества связанных моделей с помощью bindModel - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть две модели в отношении 1: n, и я просто хочу загрузить количество связанных элементов.

Первая - это таблица / модель "Ad" (одна), которая связана с "AdEvent" (многие). AdEvents имеет внешний ключ "ad_id".

В контроллере я могу использовать его таким образом, и он загружает соответствующие записи AdEvent.

$this->Ad->bindModel(array('hasMany' => array(
    'AdEvent' => array(
        'className'    => 'AdEvent',
        'foreignKey'   => 'ad_id',
    ))));

Теперь мне просто нужен счетчик без данных, и я попытался с помощью параметров "fields" и "group" выполнить оператор COUNT (), но в этом случае результат будет пустым. Я также изменил отношение к hasOne, но без эффекта.

Есть идеи, как использовать магию торта для этого?

EDIT: С простым SQL это выглядело бы так (я просто указал a.id вместо a. *):

    SELECT a.id, COUNT(e.id) AS count_events
      FROM cake.admanager_ads AS a
      JOIN ad_events AS e ON e.ad_id = a.id
     GROUP BY a.id
     LIMIT 50;

1 Ответ

1 голос
/ 07 декабря 2011

Вы всегда можете сделать ручной подсчет, конечно. Это то, чем я почти всегда занимаюсь, потому что у меня почти всегда загружаются данные уже для какой-то другой цели.

$Ads = $this->Ad->find('all')
foreach ($Ads as $Ad) {
    $NumAdEvents = array(
        $Ad['Ad']['id'] => sizeof($Ad['AdEvents']),
    )
}
debug($NumAdEvents);
die;

Или вы можете использовать находку ('count'):

$id_of_ad = 1; //insert your ad id here, or you can search by some other field
$NumAdEventsAtOneAd = $this->AdEvent->find('count', array('conditions' => array(
    'AdEvent.ad_id' => $id_of_ad,
)));
debug($NumAdEventsAtOneAd);
die;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...