CakePHP: количество пользователей с постами или страницами, помеченными данным тегом - PullRequest
0 голосов
/ 08 февраля 2012

У нас есть следующие отношения для наших данных:

Пользователи

  • Имеют и принадлежат многим страницам
  • Имеют и принадлежат многим сообщениям

Страницы

  • Имеют и принадлежат многим пользователям
  • Имеют и принадлежат многим тегам

Сообщений

  • Иметь и принадлежать многим пользователям
  • Иметь и принадлежать многим тегам

Теги

  • Иметь и принадлежать многим Страницам
  • Иметь и принадлежать ко многим сообщениям

Вот наш вопрос: есть ли способ получить просто подсчет количества уникальных пользователей, когда-либо создававших страницу или сообщение, которое было помечено даннымTag?

В нашей модели Tag:

function getSupportingUserCount($tag_id)
{
    $user_count = $this->find(?);
    return $user_count;
}

1 Ответ

1 голос
/ 20 февраля 2012

Вы можете просто избегать объединений, которые могут быть медленными, если у вас много строк. Поэтому сначала получите tagid, затем найдите этот идентификатор с помощью ассоциаций модели пользователя.

$tag = $this->Tag->find('first', array('conditions'  => array('Tag.name' => 'blahblah'), 'recursive'  => -1);
$tag_id = $tag['Tag']['id'];
$this->User->find('count', array('conditions'  => "OR" => array (
    array('Page.tag_id'  => $tag_id,
          'Post.tag_id'  => $tag_id )
));

(непроверенный код, поэтому возможны опечатки)

(в сторону: вы уверены, что в каждом сообщении много пользователей? Обычно в сообщении только 1 автор)

...