2011-10-18 4 views
0

cakephpのページ付け機能を強制的に使用しようとしています。 ユーザには、メッセージがユーザに属することを意味するメッセージがあります。 私はここにページネーションを使用する必要があるので、それらをリストに表示する必要があります。私はFIND文のコメントを解除したときにcakephp 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(); 

それは私にレコードを示していますがのpaginateの場合には、それはdoesntの: 問題は、私は 私のコードをバインドしようとするモデルのレコードである私を示しdoesntのことです。 また、それは私にページネートクエリの結合を示していますが、レコードを数えています。 誰もがアイデアを持っています。私はページングを使用したくありません。ここに参加してください。そこには、ここに属している方法がありますか?

よろしく ヒマンシュー・シャーマ

答えて

7

は、あなたが試してみました:

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

をページネータは、実際には2つのクエリを実行:1レコードの合計数をカウントするために、もう一つは、実際に必要なレコードを取得します。既定では、bindModel()を使用してオンザフライで作成された関連付けは、クエリごとにリセットされます。それは、クエリが最初に来るCakeのバージョンに依存しますが、私はあなたのケースではカウントクエリであると信じています。関連付けなしで実際の結果クエリを残します。 bindModel()の第2引数でfalseをオンに設定すると、関連付けが最初のクエリの後にリセットされなくなります。

+0

あなたの注意を払ってくれてありがとうElte、病気これをチェックして、あなたに知らせてください。モデルを関連付けるより良い方法はありますか?私はバインドモデルが重いと聞いています。 –

+1

Thans ELte.Itは働いていました。しかし、彼らは期待するものとより良い関連を作るものがあると言います。私はそれについて知らない –

+0

本当に高負荷のアプリケーションを持っていない限り、そして、あなたのコードをきれいに書いて、最も理にかなっています。とにかくあなたの 'Message belongsTo Npo'関係がMessageモデルに永続的でない理由を聞いてもよろしいですか? –

関連する問題