0

Article モデルと Photo モデルがあり、現在、次のようなクエリを使用して 2 つを結合しています。

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

それらを結合するために、ArticlePhotoモデルがあります。フィールドに加えてarticle_idphoto_idモデルにはpriority INTフィールドもあり、これを使用して上記のクエリで写真を並べ替えます。

このようなクエリを介して参加することなく、これを達成する方法についての提案:

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

の記事の最初の写真を見つけることを期待するコードがたくさんある$article['Photo'][0]ので、これを変更する必要は避けたいと思います。ご提案ありがとうございます。

4

2 に答える 2

1

結合の何が問題になっていますか? クエリはいつでも次のように書き換えることができます。

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

これは、魔法のない完全に優れたクエリのように見えます。ArticlePhoto テーブルからの情報が (並べ替えのために) 必要なので、明示的な結合を行うのが適切です。

于 2012-04-19T14:15:16.487 に答える
0
$q = Doctrine_Query::create()
   ->from('Photo p')
   ->orderBy('priority');

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

$photoObjectCollection=$q->execute();
foreach($photoObjectCollection as $photoObject){
    $photoObject->Article->requiredField;
}
于 2012-04-18T11:50:40.057 に答える