原则2,原生查询

Rau*_*aul 8 native doctrine-orm

我正在尝试使用Doctrine 2进行本机查询..但我不能让它工作..

$q = "SELECT * FROM user_recent_activity WHERE id = {$user->id}";
$rsm = new \Doctrine\ORM\Query\ResultSetMapping;
$query = $this->_em->createNativeQuery($q, $rsm);
$result = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

这是返回空数组..我不确定它是如何工作的"ResultSetMapping",但我不能用这个查询映射,就像我在doctrine网站的例子中看到的那样,因为user_recent_activity它不是一个表,它是一个像这个:

id  user_id  type     created_at
12  5        opinion  2011-02-22 23:29:00
2   2       vote     2011-01-30 14:16:51
Run Code Online (Sandbox Code Playgroud)

id代表不同的对象,所以,不是外键..

那么,是否可以对Doctrine 2进行正常查询?..我变得疯了..

谢谢

Hak*_*yal 7

如果您从查询中获取行和列,那么它应该是一个视图或表.

您需要使用rsm将结果映射到本机sql查询的实体.

$rsm->addEntityResult('UserRecentActivity', 'u');
$rsm->addFieldResult('u', 'id', 'id');
$rsm->addFieldResult('u', 'user_id', 'user_id');
$rsm->addFieldResult('u', 'type', 'type');
$rsm->addFieldResult('u', 'created_at', 'created_at');
Run Code Online (Sandbox Code Playgroud)

而且你也应该拥有合适的实体.

有关更多详细示例,请查看http://www.doctrine-project.org/docs/orm/2.0/en/reference/native-sql.html.

更新:

如果视图包含来自多个表的结果,则可以使用addJoinedEntityResult()方法将结果映射到其各自的实体.您需要相应地定义实体并将结果映射到它们的字段.

此方法可能最终会出现部分对象,因此应谨慎使用以避免数据损坏.

有关部分对象的信息:http://www.doctrine-project.org/docs/orm/2.0/en/reference/partial-objects.html