考虑这两个实体:
/** @Entity */
class String {
/** @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;
/** @Column(length=255) */
public $name;
/**
* @OneToMany(targetEntity="StringTranslation", mappedBy="owner") */
public $translations;
}
/** @Entity */
class StringTranslation {
/** @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;
/* @ManyToOne(targetEntity="String", inversedBy="translations")
* @JoinColumn(name="foreignId", referencedColumnName="id") */
public $owner;
/** @Column(length=2) */
public $lang;
/** @Column(length=255) */
public $translation;
}
当我使用
获取查询时$query = qb()->select(array('s', 't'))
->from('String', 's')
->leftJoin('s.translations', 't')
->getQuery()
->getSQL();
我得到了这个结果:
SELECT s0_.id AS id0,s0_.name AS name1,s1_.id AS id2,s1_.foreign_id AS foreign_id3,s1_.lang AS lang4,s1_.translation AS translation5 FROM String s0_ LEFT JOIN
为什么没有生成左连接?
当我尝试使用
获取查询结果时$query = qb()->select(array('s', 't'))
->from('String', 's')
->leftJoin('s.translations', 't')
->getQuery()
->getArrayResult();
出现此错误:
致命错误:带有消息的未捕获异常'PDOException' 'SQLSTATE [42000]:语法错误或访问冲突:1064您有 SQL语法错误
如何解决这个问题?
答案 0 :(得分:1)
/**
开头,而不是/*
。改变行
/* @ManyToOne(targetEntity="String", inversedBy="translations")
到
/** @ManyToOne(targetEntity="String", inversedBy="translations")
解决了这个问题!