【发布时间】:2011-12-07 09:21:21
【问题描述】:
考虑这两个实体:
/** @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 字符串 s0_ LEFT JOIN
为什么没有生成左连接?
当我尝试使用
获取查询结果时$query = qb()->select(array('s', 't'))
->from('String', 's')
->leftJoin('s.translations', 't')
->getQuery()
->getArrayResult();
出现此错误:
致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误
如何解决这个问题?
【问题讨论】:
-
您是否使用
orm:validate-schema验证了您的架构? -
我是学说新手,所以我想知道如何运行
orm:validate schema。当我使用 Schematool 生成 schemasql 时,它输出array( [0] => 'CREATE TABLE String (id INT AUTO_INCREMENT NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB' [1] => 'CREATE TABLE StringTranslation (id INT AUTO_INCREMENT NOT NULL, lang VARCHAR(2) NOT NULL, translation LONGTEXT NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB' )StringTranslation 中的 foreignId 列似乎丢失了,即使我在 de JoinColumn 注释中指定了它
标签: doctrine-orm