2012-04-16 3 views
0

私はArticleモデルと写真のモデルを持っている、と私は現在、2つに参加するために、このようなクエリを使用しています:Doctrine 1.2では、多対多の関係でグルーオブジェクトのプロパティにアクセスするにはどうすればよいですか?

$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.Photo p'); 

それらを一緒に結合するために、私はArticlePhotoモデルを持っています。 article_idフィールドとphoto_idフィールドに加えて、モデルにはpriority INTフィールドもあり、上記のクエリで写真を並べ替えるためのフィールドです。

私はこのようなクエリを通じて参加することなく、これを達成することができますどのように任意の提案:

$q = Doctrine_Query::create() 
     ->from('Article a') 
     ->leftJoin('a.ArticlePhoto ap') 
     ->leftJoin('ap.Photo p') 
     ->orderBy('ap.priority'); 

あり$article['Photo'][0]に記事の最初の写真を見つけることを期待し多くのコードがあるので、私がしたいですこれを変更する必要はありません。何か提案ありがとう!

答えて

1

結合には何が問題なのですか?あなたはいつもこれにクエリを書き直すことができます任意の魔法のない完全に罰金クエリのように見えます

$q = Doctrine_Query::create() 
    ->from('Article a') 
    ->leftJoin('a.ArticlePhoto ap, ap.Photo p') 
    ->orderBy('ap.priority'); 

を。 ArticlePhotoテーブル(ソート用)の情報が必要なので、明示的な結合を行うことが適切です。

+0

ありがとう、遅れた応答については申し訳ありません:)私はあなたの提案をしました。 – Nils

0
$q = Doctrine_Query::create() 
    ->from('Photo p') 
    ->orderBy('priority'); 

上記はトリックです。リレーションを持つテーブルを結合する必要はないことを覚えておいてください(あなたの例では、テーブルはスキーマ内に1:mの関係を持っていると仮定します)。以下のように記事オブジェクトを歓迎することができます

$photoObjectCollection=$q->execute(); 
foreach($photoObjectCollection as $photoObject){ 
    $photoObject->Article->requiredField; 
} 
+0

'priority'は' Photo'ではなく 'ArticlePhoto'のフィールドです。私はあなたのクエリがトリックをするとは思わない。 – j0k

+0

そして、単に$ photoObject-> Article-> requiredFieldを使用すると、Articleフィールドにアクセスするたびに別のDBクエリを使うようです。むしろ同じクエリで必要なすべてのデータを要求したいと思います。 – Nils

関連する問題