我有一些实体具有一对多/多对一关系-
生产类别-
/**
* @OneToMany(targetEntity="ProductionsKeywords", mappedBy="production")
*/
protected $productionKeywords;
产品关键词类-
/**
* @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 EntityProduction p");
productions、productionKeywords和keywords的加载都很好,但是如果我尝试获取加入productionKeyword和关键字(如)
$query = $this->entityManager->createQuery("SELECT p, pk, k FROM EntityProduction p
LEFT JOIN p.productionKeywords pk
LEFT JOIN pk.keyword k
");
则不加载实体。不确定我做错了什么,因为我与其他一些实体有着相同的关系设置,而且对他们来说很好。
好的,所以如果您有一个"纯"联接实体(如上面的ProductionsKeywords类),那么它就不能在fetch查询中使用。我通过使用productions_keywords表中的时间戳列作为ProductionsKeywords类中的另一个属性来解决这个问题,然后fetch联接开始工作。