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,所以当时我觉得我的答案是合适的。