Doctrine2: как решить, что левое соединение не генерируется - PullRequest
1 голос
/ 07 декабря 2011

рассмотрим эти две сущности:

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

Я получаю этот результат:

ВЫБРАТЬ 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 перевод5 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 Ответ

1 голос
/ 07 декабря 2011

Нашли это! Все сводится к опечатке. Аннотации должны начинаться с /**, а не с /*. Смена линии

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

до

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

решил проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...