3

我有一些具有一对多/多对一关系的实体 -

生产类——

/**
 * @OneToMany(targetEntity="ProductionsKeywords", mappedBy="production")
 */
protected $productionKeywords;

ProductionsKeywords 类 -

/**
 * @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");

作品、productionKeywords 和关键字都可以正常加载,但是如果我尝试获取加入 productionKeywords 和关键字,例如

$query = $this->entityManager->createQuery("SELECT p, pk, k FROM \EntityProduction p 
                         LEFT JOIN p.productionKeywords pk
                         LEFT JOIN pk.keyword k
                         ");

然后实体没有加载。不知道我做错了什么,因为我与其他一些实体有相同的关系设置并且它适用于它们。

4

1 回答 1

0

好的,所以看起来如果你有一个“纯”连接实体(如上面的 ProductionsKeywords 类),那么它就不能用于获取查询。我通过使用 productions_keywords 表中的时间戳列作为 ProductionsKeywords 类中的另一个属性解决了这个问题,然后提取连接开始工作。

于 2012-09-27T15:12:49.733 回答