我有这样的实体:
/**
*
* @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 中使用延迟加载。
如果稍后在返回的表上使用用户,这可能会导致多次数据库调用。您必须权衡一下一次性获取数据的想法。