0

Doctrine 2.X ManyToMany アソシエーションに基づく質問があります。私のデータ構造:

news:
    id: INT

program_site:
    id: INT

news_program_site:
    newsId: INT
    programSiteId: INT

私の News.php から抽出します。

/**
 * @ORM\ManyToMany(targetEntity="ProgramSite")
 * @ORM\JoinTable(name="news_program_site",
 *      joinColumns={@ORM\JoinColumn(name="newsId", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="programSiteId", referencedColumnName="id")}
 *  )
 */
private $programSites;

私の質問:news_program_site識別子 Xのエンティティを持つすべてのニュースを取得することは可能ですか?

例:

SELECT * FROM news AS n INNER JOIN news_program_site AS s ON s.newsId = n.id WHERE s.programSiteId IN(2, 3)

ご協力いただきありがとうございます!

よろしく、マーク

4

1 に答える 1

0

あなたはSQLをやっています。教義は違います。多対多テーブルを直接操作することはありません。Doctrine がそれを処理します。あなたが望むクエリは次のとおりだと思います:

$query = $em->createQuery("SELECT n FROM news n JOIN program_site ps");
$users = $query->getResult();

次に、ニュースをエンティティとして処理し、news.getProgramSite() を呼び出して、ニュース エンティティに関連付けられた ProgramSites のリストを取得します。クエリに where 句を追加することもできますが (たとえば、特定の番組サイトにニュース アイテムを結合するため)、説明に基づいて、必要ないと思います。

これは SQL とは根本的に異なるパラダイムであり、慣れるまでに時間がかかります。

于 2013-04-28T19:53:52.800 に答える