2011-12-08 5 views
2

特定の子アイテムに属するアイテムを取得するために、cakephpにORMを使用する方法がありますか?たとえば、私は特定のコメントレコードの関連するポストレコードを取得することでした。 cakephpどのようにidによって所有されているのですか

この

は、私のコメントのモデルである:私はこれをしようとしていたが、それも、これらの私はそれに対して問い合わせたりしていたコメントはありませんので、戻ってすべてのポストを引っ張るだ

var $belongsTo = array(
    'Post' => array(
     'className' => 'Post', 
     'foreignKey' => 'post_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

$this->Post->contain('Comment'); 
$results = $this->Post->find('all', array(
    'contain' => array(
     'Comment' => array(
      'conditions' => array(
       'id' => 15 
      ) 
     ) 
))); 

をこれを行う他の方法?

答えて

0

お客様の条件でモデルを指定する必要はありませんか?例えば

$this->Post->contain('Comment'); 
$results = $this->Post->find('all', array(
    'contain' => array(
     'Comment' => array(
      'conditions' => array(
       'Comment.id' => 15 
      ) 
     ) 
))); 
+0

それはwテーブル名を指定しなくても、他の投稿だけでなく、コメントを含んでいないので、コメントのための空の配列があるだけです。しかし、私はそれがコメントを含む投稿を引き戻すだけです。私は配列を使用して修正することができます:foreach($結果としての$結果=> $値){ if(空値( 'Comment'))){ unset($ results [$ key]); } }しかし、最適化のためのクエリでそれをしたいと思っています – user781861

+0

あまりにも多くを取得し、それをフィルタリングせずに私の頭の上からそれを行う方法を考えることはできません。実際に、私はあなたがそれらの条件を指定する方法を見つけたら、ケーキはまだすべてをクエリし、それをフィルタリングするかもしれないと思います。このためにSQLクエリを実行する必要があります。 – swiecki

0

私の研究は含まれていて問題に関して、この記事に私を導いた: http://nuts-and-bolts-of-cakephp.com/2008/07/17/forcing-an-sql-join-in-cakephp/

次のように私の最終的な解決策だった:

$this->Post->unbindModel(array('hasMany' => array('Comment'))); 

    $results = $this->Post->bindModel(array('hasOne' => array(
      'Comment' => array(
       'foreignKey' => false, 
       'conditions' => array('Comment.post_id = Post.id')) 
     ))); 

    $results = $this->Post->find('all', array(
       'conditions' => array(
        'Comment.id' => 10 
       ))); 

ないかわいいですしかし仕事を終わらせる:

関連する問題