Подтвердить что ты не робот

Как получить идентификатор без участия в doctrine2?

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

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

doctrine генерирует запрос типа:

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 без таблицы подключений.

4b9b3361

Ответ 2

Попробуйте следующее:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

Ответ 3

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

Ответ 4

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

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