【发布时间】:2021-11-14 04:14:56
【问题描述】:
我有一个实体文章是自引用的。
Article {
//primary key
private $id;
//unique
private $slug;
/**
* @ORM\ManyToMany(targetEntity=self::class, inversedBy="parents")
* @ORM\JoinTable(
* name = "article_article",
* joinColumns = {@ORM\JoinColumn(name = "article_source", referencedColumnName = "id")},
* inverseJoinColumns = {@ORM\JoinColumn(name = "article_target", referencedColumnName = "id")}
* )
*/
private ?Collection $children;
/**
* @ORM\ManyToMany(targetEntity=self::class, mappedBy="children")
*/
private ?Collection $parents;
}
我从请求中获取文章 slug,我需要获取此 slug 的所有相关文章。 我正在尝试用 dql 做到这一点,但即使是简单的查询
$queryBuilder = $this->createQueryBuilder('a');
$queryBuilder->where('a.children = 1');
给我
错误:无效的路径表达式。需要 StateFieldPathExpression 或 SingleValuedAssociationField。”
所以我需要这个 sql
select a.slug from article a where a.id in (
select aa.article_target from article a2 inner join article_article aa on a2.id = aa.article_source
where a2.slug = 'article_slug'
)
翻译成dql,有人可以帮我吗? 以及如何从 dql 寻址到 table article_article?
附言这个变种工作,但不适合我,由于某些原因,我需要 dql
$article = $repository->findOneBy($criteria);
$children = $article->getChildren();
【问题讨论】:
标签: sql symfony doctrine-orm doctrine dql