2013-02-25 3 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(); 

Но я понятия не имею, как получить ИМЕННО ТОТ ЖЕ результат использования DQL или Doctrine Query Builder. В результате i означает массив объектов объекта 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(); 

Я испытал это на этот раз, и я нашел результаты по запросу.

Если у вас есть идентификатор пользовательской сущности вместо объекта, то тот же код будет работать с $ user, являющимся идентификатором пользователя.

+0

Нет, это не сработает: 'Ошибка: Недействительный PathExpression. Должно быть StateFieldPathExpression. 'Я считаю, что это не так просто. – Hast

+0

замените id WHERE u.id by u.user_id – bleuscyther

+0

Ничего из этого не работает ... – Hast

Смежные вопросы