Symfony/Doctrine:获取数据作为对象,仍然获取数组

Symfony/Doctrine:获取数据作为对象,仍然获取数组,symfony,doctrine,entity,Symfony,Doctrine,Entity,我的控制器$id中有一个外键 $query = $em->getRepository('SurgeryPatientBundle:Patients')->findPatientByUserID($id); 在我的存储库文件中,这个函数 public function findPatientByUserID($id) { return $this->getEntityManager() ->createQuery('SELECT p FRO

我的控制器$id中有一个外键

  $query = $em->getRepository('SurgeryPatientBundle:Patients')->findPatientByUserID($id);
在我的存储库文件中,这个函数

 public function findPatientByUserID($id)
{

    return $this->getEntityManager()
        ->createQuery('SELECT p FROM SurgeryPatientBundle:Patients p WHERE p.user ='.$id.'')
        ->execute();

}
我想要得到一个object的实例,但仍然得到一个数组。带有find($id)的查询工作正常

编辑
问题解决了,我太笨了,我调用了$query[0]

如果你想抓取这个对象,你不应该使用DQL。条令实体有一个功能为您处理这一点

您可以(在控制器中)使用以下代码,而不是所有这些代码:


DQL功能非常强大,但是对于像这样的简单查找,使用内置的find方法将更加有效&将实体作为条令对象提供。

您可以使用
$query->getSingleResult()以及

看这里


那么如果你传递一个用户实例,findByUser应该可以工作。它不工作,我仍然会得到这个数组(1){[0]=>class Surgery\PatientBundle\Entity\Patients\914(29)。当我找到主键(find($id))时,我会得到一个对象
findByUser($userObject)
将始终返回一个数组。但在数组中是Patients对象。如果您需要一个只返回Patient的函数,只需将其包装到自己的函数中,然后返回第一个元素或
null
,但请小心,没有人确保您的用户只有一个Patient。如果用户可以有多个Patient,则重新设置没有意义通过查询一对多关系来转换一个对象。
$em->getRepository('SurgeryPatientBundle:Patients')->find($id);