Symfony2 + Doctrine2 - 选择多对多的关系

时间:2017-06-05 08:19:43

标签: php mysql symfony doctrine-orm symfony-2.8

我从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'的新闻,并且如果已登录用户已分配类别,则定义类别。

感谢。

0 个答案:

没有答案