2012-03-14 12 views
0

私はCakePHPの新機能です。メンバーhasManyのリストはCakephpの複雑なhasMany関係のクエリ

    • 次の関係でメンバー、リスト、およびListingPicture各リスト:私は私のCakePHPの3つのモデルを持っている
      SELECT m.id, l.*, lp.picture_path 
      FROM member m INNER JOIN listing l ON m.member_id = l.member_id 
      INNER JOIN listingPicture lp ON l.listing_id = lp.listing_id 
      WHERE lp.picture_default='1' 
      

      このように私のデータベースにクエリを実行したいですhasManyのListingPicture
    • リストbelongsToのメンバー
    • ListingPicture belongsToのリスト

    メンバーからはどのようにクエリを実行できますか?

    私はうまく機能

    $this->Member->Listing->find("all") 
    

    を...試みたが、私はこのような条件を追加したとき:
    $this->Member->Listing->find('all', array(
        'conditions' => array('ListingPicture.picture_default'=>'1'))); 
    

    ...私はエラーを取得します。

    私はCakePHPを初めて使ったので、このエラーをどのように表示するのか分かりません。

    誰でもこのクエリを実行する方法を教えていただけますか?

  • 答えて

    1

    ようにモデルを設定してください:指定したフィールドと条件で、あなたがしたいだけで、関連するデータが含まれるようにCakePHPの収容可能振る舞いを使用すると

    public $actsAs = array('Containable'); 
    

    $this->Member->Listing->find('all', array(
        'fields' => array('*'), 
        'contain' => array(
         'Member' => array(
          'fields' => array('id') 
         ) 
         'ListingPicture' => array(
          'conditions' => array('ListingPicture.picture_default' => '1') 
          'fields' => array('picture_path') 
         ) 
        ) 
    )); 
    

    MVCの概念に従うには、コントローラーとは対照的に、モデル内に見つけることをお勧めします。それは必須ではありませんが、すべての場所を正確に把握するのがずっと簡単で、「Fat model/Skinny controler」という言葉を使い続けます。この場合、次のようになります。

    //in the Member Controller 
    $listings = $this->Member->Listing->getListings(); 
    
    //in the Listing Model 
    function getListings() { 
        $listings = $this->find('all', ... 
        return $listings; 
    } 
    
    0

    ListPictureをListにバインドするときに条件を指定する必要があります。

    $this->Member->Listing->bindModel(array(
        'ListPicture'=>array(
        'condtions'=>array('ListingPicture.picture_default'=>'1') 
    )) 
    );