如何在没有加入doctrine2的情况下获取id?

Art*_*nko 21 php doctrine-orm

我有这样的实体:

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


}
Run Code Online (Sandbox Code Playgroud)

如果我做 $q->getQuery()->getSingleResult()->getUser()->getUserId()

doctrine生成查询,如:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100
Run Code Online (Sandbox Code Playgroud)

但如果我不需要表用户,如何获得userId.

在纯SQL中,我可以

SELECT * FROM table WHERE id = 100
Run Code Online (Sandbox Code Playgroud)

并获取没有join users表的userId.

Tar*_*use 37

您可能还想查看IDENTITY()函数(Doctrine版本> 2.2).

例:

SELECT IDENTITY(t.User) AS user_id from Table
Run Code Online (Sandbox Code Playgroud)

应该返回:

[ ['user_id' => 1], ['user_id' => 2], ... ]
Run Code Online (Sandbox Code Playgroud)

另见:http: //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions


小智 8

试试这个:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);
Run Code Online (Sandbox Code Playgroud)


Pre*_*gha -7

我不知道doctrine2,但从我读到的来看,这是一个 ORM。所以我建议您需要一种不加载用户的延迟加载形式。本文建议在doctrine2 中使用延迟加载

如果稍后在返回的表上使用用户,这可能会导致多次数据库调用。您必须权衡一下一次性获取数据的想法。

  • 如果您不熟悉该主题,请不要回答问题! (4认同)