CakePHP: количество пользователей с сообщениями или страницами, помеченными данным тегом

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

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

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

Страницы

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

Сообщения

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

Теги

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

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

В нашей модели тегов:

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

person Iniq    schedule 08.02.2012    source источник
comment
Сразу переходите к плану Б и используйте $this->query()   -  person Henri    schedule 09.02.2012


Ответы (1)


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

$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 автор)

person Costa    schedule 20.02.2012
comment
В нашем случае у постов много авторов. Они создаются совместно, и здесь возникают сложности. - person Iniq; 12.04.2012