28

我有这样的实体:

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

但如果我不需要表用户,如何获取用户 ID。

在纯 SQL 中,我可以

SELECT * FROM table WHERE id = 100

并在不加入用户表的情况下获取 userId。

4

4 回答 4

56

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

例子:

SELECT IDENTITY(t.User) AS user_id from Table

应该返回:

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

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

于 2013-12-15T12:01:07.353 回答
10

尝试这个:

$q = $qb->getQuery();
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);
于 2011-07-12T14:39:51.917 回答
0

根据文档,D2 实体永远不需要公开外键,因为这一切都是由映射信息在内部完成的,但是,正如您所发现的,有时需要拥有这个值。为此,只需提供外键的映射信息。

于 2011-05-19T18:07:27.713 回答
-6

我不知道教义2,但从我读到的内容来看,这是一个ORM。所以我建议你需要一种不加载用户的延迟加载形式。这篇文章建议在学说 2 中可以使用延迟加载

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

于 2010-10-12T09:57:57.177 回答