2014-01-17 51 views
0

我的問題是,當我嘗試使用$em->find方法來查找數據庫記錄時,它返回一個Controller。EntityManager getRepository,方法find(id)返回控制器

讓我換一個例子:

Neostat\DiagnosticoBundle\Controller\ComponentController.php

$em = $this->getDoctrine()->getEntityManager(); 
$diagnostico = $em->getRepository('NeostatDiagnosticoBundle:Diagnostico')->find($id); 
var_dump(get_class($diagnostico)); 

它返回Neostat\DiagnosticoBundle\Controller\ComponentController

但是我對src/Neostat/DiagnosticoBundle/Entity/Diagnostico.php稱爲Diagnostico.php實體:

namespace Neostat\DiagnosticoBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Neostat\PacienteBundle\Entity\Paciente; 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 

/** 
* Diagnostico 
* 
* @ORM\Table(name="diagnostico") 
* @ORM\Entity(repositoryClass="Neostat\DiagnosticoBundle\Entity\DiagnosticoRepository") 
* @UniqueEntity(fields={"nombre"}, message="Ya existe un diagnostico con ese nombre.") 
*/ 
class Diagnostico 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
private $id; 

// etc... 
} 

我在做什麼錯?

+0

你有哪個版本的symfony? – zizoujab

+0

對不起,Symfony版本2.4.1,並認爲教條版本是2.2。 –

+0

如果symfony版本是問題,我可以使用作曲家進行降級嗎?你推薦哪個版本? –

回答

4

它不返回控制器(這是不可能的),你認爲它的原因是功能get_class()的行爲。

引用PHP documentation of the function get_class():「如果在類內部省略了object,則返回該類的名稱。」

基本上,在你的情況下,find方法返回一個空值,因此沒有找到該實體。

當功能get_class()返回當前班級時,您應該嘗試function gettype();這個函數會告訴你返回的值是一個字符串,一個對象,NULL還是任何其他類型。

+2

考慮更改 '$ diagnostico = $ EM-> getRepository( 'NeostatDiagnosticoBundle:Diagnostico') - >查找($ ID); ($ id);;} $($'$'); $($'$'); $($'$'); $'$'$''$'$'$'$'$'$'$'$'如果(!$ diagnostico){ throw $ this-> createNotFoundException(); }' – CappY

+0

這也是一個很好的建議和一個很好的實踐,你介意我的答案是否包括你的建議? –

+0

我不介意,繼續:) – CappY

0

find的學說數據庫記錄,請使用findOneById或類似findOneByUser等。

,如果你想找到一個列表,使用findByField像findByType

這些是默認提供的原則。

+0

其實在Doctrine 2中,find和findOneById是一樣的。 – Cerad