Doctrine - 在公共属性上匹配实体(OneToMany& ManyToMany)

时间:2018-05-24 09:36:25

标签: symfony doctrine mapping dql

我正在尝试根据一组标准匹配两个实体,但我似乎无法在这种特殊情况下使其工作。

出于示例的目的,让我们说:

带有N标签的文章 带有1个标签的类别

我想要做的是,在我的存储库中执行以下操作:

$this->createQueryBuilder('article')
  ->join('App\Enttiy\Category', 'c', Join::WITH, 'c.id = :category_id)
  ->where('c.tag IN article.tags')
  ->andWhere(':category_id', $category->getId())
  ->getQuery()
  ->getResult();

当然,在这个例子中,最简单的方法是定义我的对象之间的关系,但在我的实际情况中,这种关系将是一场噩梦。

我遇到的问题是where行,因为IN条款没有这样做。

任何人都知道我如何使用DQL来做到这一点? :)

先谢谢

1 个答案:

答案 0 :(得分:0)

首先,您的andWhere无法使用,您需要使用->setParameter(),而不是这样:

$this->createQueryBuilder('article')
  ->join('App\Enttiy\Category', 'c', Join::WITH, 'c.id = :category_id')
  ->where('c.tag IN article.tags')
  ->setParameter('category_id', $category->getId())
  ->getQuery()
  ->getResult();

之后,您忘记了'中的join,此处:'c.id = :category_id,我在我的示例中添加了它(不知道它是否输入错误)。

请尝试使用此功能并告诉我您是否再次出现错误,如果您有错误,请告诉我它是什么。