2011-10-18 58 views
0

我想强制加入cakephp的页面函数。 用户有消息,这意味着它将是属于用户的消息。 我必须在列表中显示它们,所以我需要在这里使用分页。 问题是它没有显示我我打算结合 我的代码模型的记录:在cakephp页面强制属于关系

$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的情况下,它不。 另外,它并没有显示我在页面查询中的连接,但它在计数记录。 任何人都有一个想法。我不想使用paginate加入here.Is有办法强制一个属于这里吗?

问候 人士Himanshu夏尔马

回答

7

你试过:

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

的分页程序实际上执行两个查询:一个来计算记录的总数,以及一个真正获取所需的记录。默认情况下,在每个查询后重置使用bindModel()即时创建的关联。它依赖于Cake哪个查询首先出现,但我相信在你的情况下它是count查询;没有关联就留下实际的结果查询。在bindModel()的第二个参数上设置false,可以防止关联在第一个查询后重置。

+0

感谢您的关注Elte,我检查了这一点,让你知道。是否有更好的方式来关联模型,然后呢?我听说绑定模型更重。 –

+1

Thans ELte.It的工作。但他们说有什么叫预期和所有这使得更好的协会。我不知道它 –

+0

除非你真的有一个高负荷的应用程序,我真的不担心这种性能改善,只需按照最清晰和最有意义的方式编写代码即可。请问为什么你的'Message belongsTo Npo'关系在消息模型中不是永久的? –