在cakephp paginate中强制属于关系

时间:2011-10-18 13:21:05

标签: php cakephp pagination cakephp-1.3

我正在尝试强制加入cakephp的paginate函数。 用户有消息,这意味着消息属于用户。 我必须在列表中显示它们,所以我需要在这里使用paginate。 问题是它没有显示我打算绑定的模型的记录 我的代码是:

$userId     = $this->Session->read('SESSION_ADMIN.id');
        $this->helpers['Paginator'] = array('ajax' => 'Ajax');

      $this->Message->bindModel(
           array(
             'belongsTo'=>array(
                 'Npo'=>array(
                   'className'  =>  'Npo',
                 'foreignKey' => 'reciever_id',
                 'fields'     => 'Npo.username'
               )          
           )
        )
    );
    $this->paginate = array('conditions'=>array('Message.sender_id'=>$userId,'Message.sender'=>'Admin'),
                            'order'     => array('Message.modified DESC'),
                            'limit'     =>'1'
                              );     
    $sentMsg =  $this->paginate('Message');
    //$sentMsg =  $this->Message->find('all');
    pr($sentMsg);die();

当我取消注释FIND语句时,它会显示我的记录但是在分页的情况下它不会。 它也没有显示我在分页查询中的连接,但它在计数记录中。 任何人都有一个想法。我不想使用paginate加入这里。有没有办法强制属于这里?

此致 Himanshu Sharma

1 个答案:

答案 0 :(得分:7)

你试过了吗?

$this->Message->bindModel(
           array(
             'belongsTo'=>array(
                 'Npo'=>array(
                   'className'  =>  'Npo',
                 'foreignKey' => 'reciever_id',
                 'fields'     => 'Npo.username'
               )          
           )
        ), false // Note the false here!
    );

paginator实际上执行两个查询:一个用于计算记录总数,另一个用于实际获取所需记录。默认情况下,在每次查询后,将使用bindModel()动态创建的关联重置。这取决于查询首先出现的Cake版本,但我相信在你的情况下它是count查询;离开实际结果查询没有关联。在bindModel()的第二个参数上设置false可防止在第一个查询后重置关联。