Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不加入doctrine2的情况下获取id?_Php_Doctrine Orm - Fatal编程技术网

Php 如何在不加入doctrine2的情况下获取id?

Php 如何在不加入doctrine2的情况下获取id?,php,doctrine-orm,Php,Doctrine Orm,我有这样的实体: /** * * @Table(name="table") * @Entity */ class Table { /** * @Column(type="integer") * @Id * @GeneratedValue(strategy="IDENTITY") */ private $id; /** * @ManyToOne(targetEntity="Entities\Users")

我有这样的实体:

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

我不知道doctrine2,但据我所知,这是一个ORM。所以我建议您需要一种延迟加载的形式,用户不加载


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

根据文档,D2实体不应该需要公开外键,因为所有这些都是由映射信息在内部完成的,但是,正如您所发现的,现在需要时不时地使用此值。为此,只需提供外键的映射信息。

尝试以下操作:

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

您可能还想看看IDENTITY()函数(Doctrine version>2.2)

例如:

SELECT IDENTITY(t.User) AS user_id from Table
应返回:

[ ['user_id' => 1], ['user_id' => 2], ... ]
另见:

如果您不熟悉主题,请勿回答问题@杰夫:我在2010年10月回答了这个问题。直到2011年5月,我的问题才有答案。那是问题公布后的7个月。虽然一般来说,从一个有限的角度来看,您可能是正确的,但用户不会及时得到问题的答案。也有人会说,因为我非常熟悉ORMs,所以当时我觉得我的答案是合适的。