2013-02-25 49 views
0

我必須與鏈接表具有ManyToMany關係的實體。就像這樣:使用DQL選擇多對多實體集合

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; 
} 

我可以用一個用戶實體對象得到所有用戶的喜愛帖子:

$favorites = $user->getFavoritesPosts(); 

但我不知道怎麼去EXACTLY使用DQL或學說查詢同一結果生成器。在結果下,我的意思是一個POST實體對象的數組。

回答

1

在此基礎上exemple

如果您想通過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一起使用。

+0

不,它不起作用:'錯誤:PathExpression無效。必須是StateFieldPathExpression.'我相信這並不容易。 – Hast 2013-02-26 00:01:51

+0

用u.user_id替換id WHERE u.id – bleuscyther 2013-02-26 00:40:00

+0

沒有這些工作... – Hast 2013-02-26 18:41:49