我有一些具有一对多/多对一关系的实体 -
生产类 -
/**
* @OneToMany(targetEntity="ProductionsKeywords", mappedBy="production")
*/
protected $productionKeywords;
ProductionsKeywords class -
/**
* @ManyToOne(targetEntity="Production", inversedBy="productionKeywords")
* @JoinColumn(name="production_id", referencedColumnName="id", nullable=false)
* @Id
*/
protected $production;
/**
* @ManyToOne(targetEntity="Keyword", inversedBy="keywordProductions")
* @JoinColumn(name="keyword_id", referencedColumnName="id", nullable=false)
* @Id
*/
protected $keyword;
关键字类 -
/**
* @OneToMany(targetEntity="ProductionsKeywords", mappedBy="keyword")
*/
protected $keywordProductions;
如果我编写像
这样的DQL查询$query = $this->entityManager->createQuery("SELECT p FROM \Entity\Production p");
制作,制作关键字和关键字都加载正常,但是如果我尝试获取加入关键词和关键字
$query = $this->entityManager->createQuery("SELECT p, pk, k FROM \EntityProduction p
LEFT JOIN p.productionKeywords pk
LEFT JOIN pk.keyword k
");
然后没有加载实体。 不知道我做错了什么,因为我与其他一些实体建立了相同的关系,并且它可以正常使用它们。
答案 0 :(得分:0)
好的,所以看起来如果你有一个'纯'连接实体(比如上面的ProductionsKeywords类)那么它就不能用在获取查询中。我通过使用productions_keywords表中的timestamp列作为ProductionsKeywords类中的另一个属性解决了这个问题,然后fetch join开始工作。