Комплекс Cakephp найти условие с подсчетом на дочернем столе - PullRequest
1 голос
/ 09 февраля 2012

У меня есть две таблицы тем и сообщений. Отношение: темы имеет много сообщений. В обеих таблицах есть поле состояния (Y, N), чтобы модерировать контент. На моей странице я хочу перечислить все не модерируемые темы, для которых по крайней мере один статус сообщения равен N или сам статус темы равен N. Можно ли это сделать с помощью функции поиска в cakephp2.0. Я использую контейнерное поведение.

Мне тоже нужно применить нумерацию страниц.

Ответы [ 3 ]

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

Ну, я не проверял, но следующее должно работать

   $this->recursive = -1;        //necessary to use joins

   $options['joins'] = array(
   'table' => 'posts',
   'alias' => 'Post',
   'type' => 'left',
   'conditions' => array('Topic.id = Post.topic_id', 'Post.status = N') //updated code
   );
   $options['group'] = array('Topic.id HAVING count('Topic.id') >= 1 OR Topic.status = N');
   $this->Topic->find('all', $options);
1 голос
/ 10 февраля 2012

Это одно решение:

  1. Поиск в модели сообщений для (сообщения со статусом N) ИЛИ (сообщения, принадлежащие темам со статусом N) и сохранение topic_id
  2. Теперь выполните поиск в модели тем для тем с идентификатором в списке

Примерно так:

# TopicsController.php

$ids = $this->Topic->Post->find('list', array(
    'fields' => array('Post.topic_id')
    'conditions' => array(
        'OR' => array(
            'Post.status' => 'N',
            'Topic.status' => 'N',
        )
    )
));

$this->paginate = array(
    'conditions' => array('Topic.id' => (array)$ids),
    'order' => array('Topic.created' => 'DESC')
);

$topics = $this->paginate('Topic');

Поскольку вы выполняете поиск по модели сообщений, CakePHP присоединится к данным родительской темы, и вы сможете фильтровать по обоим статусам.

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

Если я правильно понимаю, вы можете использовать:

$conditions => array ('OR' => array ('Topic.status' => 'N', 'Post.status' => 'N'));
...