0

リンクテーブルとManyToManyの関係があるエンティティを作成する必要があります。このような:

class User
{

    /**
     * @ORM\ManyToMany(targetEntity="Post")
     * @ORM\JoinTable(name="favorite_posts",
     *      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="post_id", referencedColumnName="id")}
     *      )
     **/
    private $favoritePosts;
}

class Post
{
    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="favoritePosts")
     */
    private $usersInFavorite;
}

そして、Userエンティティオブジェクトを使用して、すべてのユーザーのお気に入りの投稿を取得できます。

$favorites = $user->getFavoritesPosts();

しかし、DQLまたはDoctrineQueryBuilderを使用してまったく同じ結果を取得する方法がわかりません。結果の下で、私はPOSTエンティティオブジェクトの配列を意味します。

4

1 に答える 1

1

この例に基づく

dqlでフェッチする場合は、

$dql = "SELECT p FROM Posts p INNER JOIN p.$usersInFavorite u WHERE u= ?1";

$query = $entityManager->createQuery($dql)
                       ->setParameter(1, $user);
$favoritePosts = $query->getResult();

今回テストしたところ、要求どおりの結果が得られました。

エンティティの代わりにユーザーエンティティのIDがある場合、同じコードが機能し、$userがユーザーのIDになります。

于 2013-02-25T23:15:07.630 に答える