Как получить идентификатор без присоединения к doctrine2? - PullRequest
19 голосов
/ 12 октября 2010

У меня есть такая сущность:

/**
 *
 * @Table(name="table")
 * @Entity
 */
 class Table {

    /**
     * @Column(type="integer")
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
     private $id;


    /**
     * @ManyToOne(targetEntity="Entities\Users")
     * @joinColumn(name="userId", referencedColumnName="id")
     */
     private $User;


    /**
     * @Column(type="string")
     */
     private $text;


}

Если я делаю $q->getQuery()->getSingleResult()->getUser()->getUserId()

, доктрина генерирует запрос вроде:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100

, но если я этого не сделаюнужны пользователи таблиц, как получить userId.

В чистом SQL я могу просто

SELECT * FROM table WHERE id = 100

и получить userId без таблицы присоединяемых пользователей.

Ответы [ 4 ]

36 голосов
/ 15 декабря 2013

Вы также можете посмотреть на функцию IDENTITY () (версия Doctrine> 2.2).

Пример:

SELECT IDENTITY(t.User) AS user_id from Table

Должен вернуться:

[ ['user_id' => 1], ['user_id' => 2], ... ]

Смотрите также: http://docs.doctrine -project.org / проекты / Доктрина-ОРМ / о / последняя / ссылка / DQL-доктрина-запрос-language.html # DQL-функция

7 голосов
/ 12 июля 2011

Попробуйте это:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);
0 голосов
/ 19 мая 2011

Согласно документации, сущности D2 никогда не должны раскрывать внешний ключ, поскольку все это делается внутренне посредством информации отображения, однако, как вы выяснили, время от времени необходимо иметь это значение.Для этого просто предоставьте информацию о сопоставлении для внешнего ключа.

0 голосов
/ 12 октября 2010

Я не знаю doctrine2, но из того, что я прочитал, это ORM. Поэтому я хотел бы предложить вам ленивую загрузку, когда пользователь не загружен. Эта статья предполагает, что ленивая загрузка доступна в доктрине2 .

Это может привести к нескольким вызовам в БД, если пользователь позже будет использован в возвращаемой таблице. Вы должны взвесить это с идеей сбора данных одним ударом.

...