Php EntityManager getRepository,方法find(id)返回控制器

Php EntityManager getRepository,方法find(id)返回控制器,php,symfony,doctrine,entitymanager,Php,Symfony,Doctrine,Entitymanager,我的问题是,当我尝试使用$em->find方法查找数据库记录时,它会返回一个控制器 让我举一个例子: Neostat\DiagnosticoBundle\Controller\ComponentController.php: $em = $this->getDoctrine()->getEntityManager(); $diagnostico = $em->getRepository('NeostatDiagnosticoBundle:Diagnostico')->fi

我的问题是,当我尝试使用
$em->find
方法查找数据库记录时,它会返回一个控制器

让我举一个例子:

Neostat\DiagnosticoBundle\Controller\ComponentController.php

$em = $this->getDoctrine()->getEntityManager();
$diagnostico = $em->getRepository('NeostatDiagnosticoBundle:Diagnostico')->find($id);
var_dump(get_class($diagnostico));
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...
}
它返回
Neostat\DiagnosticoBundle\Controller\ComponentController

但是我在
src/Neostat/diagnosticbundle/entity/Diagnostico.php
中有一个名为
Diagnostico.php的实体:

$em = $this->getDoctrine()->getEntityManager();
$diagnostico = $em->getRepository('NeostatDiagnosticoBundle:Diagnostico')->find($id);
var_dump(get_class($diagnostico));
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...
}

我做错了什么?

它不返回控制器(这是不可能的),您认为它返回的原因是函数的行为

引用:“如果在类中省略了
对象
,则返回该类的名称。”

基本上,在您的例子中,
find
方法返回一个空值,因此找不到实体


当函数
get_class()
返回当前类时,您应该尝试;此函数将指示返回的值是字符串、对象、NULL还是任何其他类型。

它不返回控制器(这是不可能的),您认为返回的原因是函数的行为
get\u class()

引用:“如果在类中省略了
对象
,则返回该类的名称。”

基本上,在您的例子中,
find
方法返回一个空值,因此找不到实体


当函数
get_class()
返回当前类时,您应该尝试;此函数将指示返回的值是字符串、对象、空值还是任何其他类型。

有关查找原则数据库记录,请使用findOneById或类似findOneByUser等

如果要查找列表,请使用类似findByType的findByField


这些是默认提供的条令。

对于查找条令数据库记录,请使用findOneById或类似findOneByUser等

如果要查找列表,请使用类似findByType的findByField


这些是默认设置的原则。

您有哪个版本的symfony?对不起,symfony版本2.4.1,我认为原则版本是2.2。如果symfony版本有问题,我可以使用composer进行降级吗?您推荐哪个版本?DiagnosticRepository中有什么?没有,DiagnosticRepository.php为空。你有哪个版本的symfony?对不起,symfony版本2.4.1,我认为条令版本是2.2。如果symfony版本有问题,我可以使用composer进行降级吗?您推荐哪个版本?DiagnosticRepository中有什么?没有,DiagnosticRepository.php为空。考虑更改<代码> $CydioCo=$EM-> GETRealStk(“NealStaseMealthCubOnL:Debug”)->查找($ID);变量转储(获取类($diagnostico))
$diagnostico=$em->getRepository('NeostatDiagnosticoBundle:diagnostico')->查找($id);如果($$诊断){抛出$-> > CalATEnOutFuxDeXCEP();}这是一个很好的建议,也是一个很好的实践,如果我把你的建议包含在我的答案中,你介意吗?考虑改变<代码> $CydioTo=$EM > GETRealStk(“NealStutsCytoCubnLe:Debug To”)->查找($ID);变量转储(获取类($diagnostico))
$diagnostico=$em->getRepository('NeostatDiagnosticoBundle:diagnostico')->查找($id);如果(!$diagnostico){throw$this->createNotFoundException();}
这是一个很好的建议,也是一个很好的实践,你介意我在回答中包含你的建议吗?实际上在原则2中,find和findOneById是相同的。实际上在原则2中,find和findOneById是相同的。