Class" AppBundle \ Entity \ Organization"不是有效的实体或映射的超类

时间:2017-08-08 07:20:15

标签: php symfony doctrine

我想用Doctrine可视化来自数据库的数据,但它似乎不起作用......

这是我的班级Organization

<?php
 namespace AppBundle\Entity;

 use Doctrine\ORM\Mapping as ORM;

/**Class Organization
 * @package AppBundle\Entity
 *
 * @ORM\Table(name="organization")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\
 * OrganizationRepository")
 *
 */
 class Organization
 {

/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;


/**
 * @var string
 * @ORM\Column(name="name", type="string", length=45)
 *
 */
protected $name;




/**
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * @param int $id
 */
public function setId($id)
{
    $this->id = $id;
}

/**
 * @return string
 */
public function getName()
{
    return $this->name;
}

/**
 * @param string $name
 */
public function setName($name)
{
    $this->name = $name;
}

}

这是错误:

  

Doctrine \ ORM \ Mapping \ MappingException:Class   &#34;的appbundle \实体\组织&#34;不是有效实体或映射超级   类。

     

在   供应商/教义/ ORM / LIB /学说/ ORM /映射/ MappingException.php:346   在   学说\ ORM \制图\ MappingException :: classIsNotAValidEntityOrMappedSuperClass(&#39;的appbundle \实体\组织&#39;)        (供应商/教义/ ORM / LIB /学说/ ORM /映射/驱动程序/ AnnotationDriver.php:91)   在   教义\ ORM \映射\驱动\ AnnotationDriver-&GT; loadMetadataForClass(&#39;的appbundle \实体\组织&#39 ;,   对象(ClassMetadata))        (供应商/教义/普通/ LIB /学说/普通/持久性/映射/驱动程序/ MappingDriverChain.php:102)   在   教义\共同\持久性\映射\驱动\ MappingDriverChain-&GT; loadMetadataForClass(&#39;的appbundle \实体\组织&#39 ;,   对象(ClassMetadata))        (供应商/教义/ ORM / LIB /学说/ ORM /映射/ ClassMetadataFactory.php:151)   在   教义\ ORM \映射\ ClassMetadataFactory-&GT; doLoadMetadata(对象(ClassMetadata),   null,false,array())        (供应商/教义/普通/ LIB /学说/普通/持久性/映射/ AbstractClassMetadataFactory.php:332)   在   教义\共同\持久性\映射\ AbstractClassMetadataFactory-&GT; loadMetadata(&#39;的appbundle \实体\组织&#39;)        (供应商/教义/ ORM / LIB /学说/ ORM /映射/ ClassMetadataFactory.php:78)   在   教义\ ORM \映射\ ClassMetadataFactory-&GT; loadMetadata(&#39;的appbundle \实体\组织&#39;)        (供应商/教义/普通/ LIB /学说/普通/持久性/映射/ AbstractClassMetadataFactory.php:216)   在   教义\共同\持久性\映射\ AbstractClassMetadataFactory-&GT; getMetadataFor(&#39;的appbundle:组织&#39;)        (vendor / doctrine / orm / lib / Doctrine / ORM / EntityManager.php:281)在Doctrine \ ORM \ EntityManager-&gt; getClassMetadata(&#39; AppBundle:Organization&#39;)        (供应商/教义/ ORM / LIB /学说/ ORM /存储库/ DefaultRepositoryFactory.php:44)   在   教义\ ORM \库\ DefaultRepositoryFactory-&GT; getRepository(对象(EntityManager的),   &#39;的appbundle:组织&#39;)        (vendor / doctrine / orm / lib / Doctrine / ORM / EntityManager.php:698)在Doctrine \ ORM \ EntityManager-&gt; getRepository(&#39; AppBundle:Organization&#39;)        (src / AppBundle / Controller / OrganizationController.php:27)在AppBundle \ Controller \ OrganizationController-&gt; showInfoAction()at   call_user_func_array(阵列(对象(OrganizationController),   &#39; showInfoAction&#39;),array())        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / HttpKernel.php:153)   在Symfony \ Component \ HttpKernel \ HttpKernel-&gt; handleRaw(object(Request),   1)        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / HttpKernel.php:68)   在Symfony \ Component \ HttpKernel \ HttpKernel-&gt;句柄(对象(请求),1,   真正)        (供应商/ symfony的/ symfony的/ SRC / Symfony的/组件/ HttpKernel / Kernel.php:171)   在Symfony \ Component \ HttpKernel \ Kernel-&gt;句柄(对象(请求))        (网络/ app_dev.php:29)

我有OrganizationControllerOrganizationRepository

2 个答案:

答案 0 :(得分:1)

将类名注释移动到下一行或在其前面给出空格,如下所示

/**
 * Class Organization
 * @package AppBundle\Entity
 *
 * @ORM\Table(name="organization")
 * 
 * @ORM\Entity(repositoryClass="AppBundle\Repository\OrganizationRepository")
 */

答案 1 :(得分:0)

  1. 您应该检查php文件名。你的实体文件名是Organization.php
  2. 吗?
  3. 您应该在代码中删除setId()方法(它不会解决您的问题,但您不能使用此方法)。因为$id是自动生成的。
  4. 删除它:

     /**
      * @param int $id
      */
      public function setId($id)
      {
           $this->id = $id;
      }
    
    1. 另外 - 尽量不要使用$id属性的私有可见性。正确的方法是 - 将其设置为受保护。