Doctrine2:如何解决未生成的左连接问题

时间:2011-12-07 09:21:22

标签: doctrine-orm

考虑这两个实体:

/** @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语法错误

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

发现它!这一切都归结为一个错字。注释必须以/**开头,而不是/*。改变行

/* @ManyToOne(targetEntity="String", inversedBy="translations")

/** @ManyToOne(targetEntity="String", inversedBy="translations")

解决了这个问题!