Cakephp复杂查找条件与子表上的计数

时间:2012-02-09 12:55:34

标签: cakephp cakephp-2.0

我有两个表主题和帖子。关系:主题有很多帖子。在这两个表中,都有一个状态字段(Y,N)来缓和内容。在我的页面中,我想列出所有未经审核的主题,其中至少有一个帖子状态为N或主题状态本身为N.是否可以在cakephp2.0中使用find功能。我正在使用可包含的行为。

我也需要应用分页。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,你可以使用:

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

答案 1 :(得分:1)

好吧,我还没有测试过,但是后续工作

   $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);

答案 2 :(得分:1)

这是一个解决方案:

  1. 在帖子模型中搜索(具有N状态的帖子)或(属于具有N状态的主题的帖子)并存储 topic_id
  2. 现在在主题模型中搜索列表中包含ID的主题
  3. 这样的事情:

    # 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');
    

    由于您正在搜索Posts模型,CakePHP将加入父主题数据,您可以按两种状态进行过滤。