我正在尝试强制加入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
答案 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
可防止在第一个查询后重置关联。