我从DB中选择具有多对多关系的数据时遇到问题。
我在页面上有新闻。每个新闻,尽管有其他领域,有两个有趣的cols - 类型(字符串)和类别。每条新闻都有很多类别。在管理员中添加时,我可以使用多个类别保存新闻。但是 - 我们有用户登录页面,每个用户都分配了类别。当用户登录并分配了类别时,我应该从DB获取具有用户选择的类别和其他新闻的新闻(类型!='news')。
News.php 实体
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\Category", inversedBy="news")
* @ORM\JoinTable(name="news_categories")
*/
private $categories;
Category.php 实体
/**
*
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\News", mappedBy="category")
*/
private $news;
我正在新闻库中收集新闻:
$query = $this->createQueryBuilder('p');
if($user->hasCategories()) {
$query
->innerJoin('p.category', 'c')
->andWhere('p.type != :paramType OR (c.id IN (:categoryIds) AND p.type = :paramType)')
->setParameter(':categoryIds', $categories)
->setParameter(':paramType', 'news');
}
$result = $query->getQuery()->getResult();
当我使用未分配类别的用户登录时 - 我收到所有新闻。不进入“如果”声明,它的工作正常。 当我使用指定类别的用户登录时,我只收到带有用户指定类别的“新闻”类型的新闻,但没有其他新闻(类型为!='news')。
我做错了什么?
再一次,目标是如果用户没有指定类别(没问题),则从新闻表中获取所有数据,并且只获取type ='news'的新闻,并且如果已登录用户已分配类别,则定义类别。
感谢。