У меня есть класс Article:
/**<br>
* @ORM\ManyToMany(targetEntity="Acme\UserBundle\Entity\User", inversedBy="like_articles")<br>
*/<br>
protected $like_users;<br>
и класс User:
/**<br>
* @ORM\ManyToMany(targetEntity="Acme\BlogBundle\Entity\Article", mappedBy="like_users")<br>
*/<br>
protected $like_articles;<br>
Установленная связь обозначает, что пользователь отметил статью как понравившуюся.
И естественно пользователь может отметить одну статью один раз, чтобы это проверить делаю так:
$article = $em->find('AcmeBlogBundle:Article', $article_id);<br><br>
if($article->getLikeUsers()->contains($this->getUser()))<br>
{<br>
throw new BadRequestHttpException('Relationship exist');<br>
}<br><br>
Включаю query log в mysql и вижу, что для проверки contains генерируется следующий запрос:
SELECT <br>
t0.username AS username1,<br>
...<br>
FROM<br>
user t0 <br>
INNER JOIN article_user <br>
ON t0.id = article_user.user_id <br>
WHERE article_user.article_id = '6252';<br>
Логично было бы если бы в запросе было еще:
AND t0.id = <id пользователя><br>
То есть, получается, если за статью проголосует 10000 человек, то для проверки голосовал ли 10001 пользователь будет извлекаться 10000 записей?
Я новичок в Symfony, подскажите, что не так?