2013-02-26 77 views
27

每次我得到異常Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Users" is not a valid entity or mapped super class當我運行下面的代碼:Doctrine2 - 「類」不是有效的實體或映射超類

test.php的

<?php 
require_once "vendor/autoload.php"; 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

$paths = array(dirname(__FILE__)."/entities"); 
$isDevMode = false; 

// the connection configuration 
$dbParams = array(
    'driver' => 'pdo_mysql', 
    'user'  => 'root', 
    'password' => 'pass', 
    'dbname' => 'snabcentr', 
); 

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); 
$em = EntityManager::create($dbParams, $config); 

$user = $em->find("Users", 5); 

實體/用戶.php

<?php 
use Doctrine\ORM\Mapping as ORM; 

/** 
* Users 
* 
* @ORM\Table(name="users") 
* @ORM\Entity 
*/ 
class Users 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="email", type="string", length=255, nullable=true) 
    */ 
    private $email; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="password", type="string", length=255, nullable=true) 
    */ 
    private $password; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="type", type="string", nullable=true) 
    */ 
    private $type; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_inn", type="string", length=255, nullable=true) 
    */ 
    private $clientInn; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_ogrn", type="string", length=255, nullable=true) 
    */ 
    private $clientOgrn; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_rs", type="string", length=255, nullable=true) 
    */ 
    private $clientRs; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_ks", type="string", length=255, nullable=true) 
    */ 
    private $clientKs; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_bik", type="string", length=255, nullable=true) 
    */ 
    private $clientBik; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_uaddress", type="string", length=255, nullable=true) 
    */ 
    private $clientUaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_faddress", type="string", length=255, nullable=true) 
    */ 
    private $clientFaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="client_daddress", type="string", length=255, nullable=true) 
    */ 
    private $clientDaddress; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, nullable=true) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="notes", type="text", nullable=true) 
    */ 
    private $notes; 

    /** 
    * @var \DateTime 
    * 
    * @ORM\Column(name="added_date", type="datetime", nullable=true) 
    */ 
    private $addedDate; 


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

    /** 
    * Set email 
    * 
    * @param string $email 
    * @return Users 
    */ 
    public function setEmail($email) 
    { 
     $this->email = $email; 

     return $this; 
    } 

    /** 
    * Get email 
    * 
    * @return string 
    */ 
    public function getEmail() 
    { 
     return $this->email; 
    } 

    /** 
    * Set password 
    * 
    * @param string $password 
    * @return SnabUsers 
    */ 
    public function setPassword($password) 
    { 
     $this->password = $password; 

     return $this; 
    } 

    /** 
    * Get password 
    * 
    * @return string 
    */ 
    public function getPassword() 
    { 
     return $this->password; 
    } 

    /** 
    * Set type 
    * 
    * @param string $type 
    * @return SnabUsers 
    */ 
    public function setType($type) 
    { 
     $this->type = $type; 

     return $this; 
    } 

    /** 
    * Get type 
    * 
    * @return string 
    */ 
    public function getType() 
    { 
     return $this->type; 
    } 

    /** 
    * Set clientInn 
    * 
    * @param string $clientInn 
    * @return SnabUsers 
    */ 
    public function setClientInn($clientInn) 
    { 
     $this->clientInn = $clientInn; 

     return $this; 
    } 

    /** 
    * Get clientInn 
    * 
    * @return string 
    */ 
    public function getClientInn() 
    { 
     return $this->clientInn; 
    } 

    /** 
    * Set clientOgrn 
    * 
    * @param string $clientOgrn 
    * @return SnabUsers 
    */ 
    public function setClientOgrn($clientOgrn) 
    { 
     $this->clientOgrn = $clientOgrn; 

     return $this; 
    } 

    /** 
    * Get clientOgrn 
    * 
    * @return string 
    */ 
    public function getClientOgrn() 
    { 
     return $this->clientOgrn; 
    } 

    /** 
    * Set clientRs 
    * 
    * @param string $clientRs 
    * @return SnabUsers 
    */ 
    public function setClientRs($clientRs) 
    { 
     $this->clientRs = $clientRs; 

     return $this; 
    } 

    /** 
    * Get clientRs 
    * 
    * @return string 
    */ 
    public function getClientRs() 
    { 
     return $this->clientRs; 
    } 

    /** 
    * Set clientKs 
    * 
    * @param string $clientKs 
    * @return SnabUsers 
    */ 
    public function setClientKs($clientKs) 
    { 
     $this->clientKs = $clientKs; 

     return $this; 
    } 

    /** 
    * Get clientKs 
    * 
    * @return string 
    */ 
    public function getClientKs() 
    { 
     return $this->clientKs; 
    } 

    /** 
    * Set clientBik 
    * 
    * @param string $clientBik 
    * @return SnabUsers 
    */ 
    public function setClientBik($clientBik) 
    { 
     $this->clientBik = $clientBik; 

     return $this; 
    } 

    /** 
    * Get clientBik 
    * 
    * @return string 
    */ 
    public function getClientBik() 
    { 
     return $this->clientBik; 
    } 

    /** 
    * Set clientUaddress 
    * 
    * @param string $clientUaddress 
    * @return SnabUsers 
    */ 
    public function setClientUaddress($clientUaddress) 
    { 
     $this->clientUaddress = $clientUaddress; 

     return $this; 
    } 

    /** 
    * Get clientUaddress 
    * 
    * @return string 
    */ 
    public function getClientUaddress() 
    { 
     return $this->clientUaddress; 
    } 

    /** 
    * Set clientFaddress 
    * 
    * @param string $clientFaddress 
    * @return SnabUsers 
    */ 
    public function setClientFaddress($clientFaddress) 
    { 
     $this->clientFaddress = $clientFaddress; 

     return $this; 
    } 

    /** 
    * Get clientFaddress 
    * 
    * @return string 
    */ 
    public function getClientFaddress() 
    { 
     return $this->clientFaddress; 
    } 

    /** 
    * Set clientDaddress 
    * 
    * @param string $clientDaddress 
    * @return SnabUsers 
    */ 
    public function setClientDaddress($clientDaddress) 
    { 
     $this->clientDaddress = $clientDaddress; 

     return $this; 
    } 

    /** 
    * Get clientDaddress 
    * 
    * @return string 
    */ 
    public function getClientDaddress() 
    { 
     return $this->clientDaddress; 
    } 

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

     return $this; 
    } 

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

    /** 
    * Set notes 
    * 
    * @param string $notes 
    * @return SnabUsers 
    */ 
    public function setNotes($notes) 
    { 
     $this->notes = $notes; 

     return $this; 
    } 

    /** 
    * Get notes 
    * 
    * @return string 
    */ 
    public function getNotes() 
    { 
     return $this->notes; 
    } 

    /** 
    * Set addedDate 
    * 
    * @param \DateTime $addedDate 
    * @return SnabUsers 
    */ 
    public function setAddedDate($addedDate) 
    { 
     $this->addedDate = $addedDate; 

     return $this; 
    } 

    /** 
    * Get addedDate 
    * 
    * @return \DateTime 
    */ 
    public function getAddedDate() 
    { 
     return $this->addedDate; 
    } 
} 

你有什麼想法麼? eAccelerator未設置。學說v 2.2,PHP v 5.3.22,zend引擎2.3.0

+1

我不認爲它需要按順序,但我總是先把'@ORM \ Entity'表示法,你有沒有試過?你有其他工作實體加載好嗎?也無關...這個類代表一個單一的「用戶」實體,所以它最好使用單數的類名(即用戶)。 – prodigitalson 2013-02-26 21:04:52

+0

這沒有幫助:(。我有更多的實體,但我有他們所有的同樣的問題......這可能是一個簡單的問題,但我找不到什麼是錯的 – KennyPowers 2013-02-26 21:07:59

+0

我沒有用過D2多在Symfony2之外...'Setup :: createAnnotationMetadataConfiguration'是否註冊了註釋? – prodigitalson 2013-02-26 21:09:50

回答

61

您正在使用Doctrine\Common\Annotations\SimpleAnnotationReader而不是Doctrine\Common\Annotations\AnnotationReader

SimpleAnnotationReader作品與默認名稱空間和讀取格式@Entity註解,而AnnotationReader可以使用導入的類和命名空間(通過use statement)和註釋如@ORM\Entity

您可以在documentation上閱讀更多關於此的內容。

這是你的test.php

<?php 

use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\Mapping\Driver\AnnotationDriver; 
use Doctrine\Common\Annotations\AnnotationReader; 
use Doctrine\Common\Annotations\AnnotationRegistry; 

require_once __DIR__ . '/vendor/autoload.php'; 
require_once __DIR__ . '/entities/Users.php'; 

$paths   = array(__DIR__ . '/entities'); 
$isDevMode  = false; 
$connectionParams = array(
    'driver' => 'pdo_mysql', 
    'user'  => 'root', 
    'password' => 'pass', 
    'dbname' => 'dbname', 
); 

$config = Setup::createConfiguration($isDevMode); 
$driver = new AnnotationDriver(new AnnotationReader(), $paths); 

// registering noop annotation autoloader - allow all annotations by default 
AnnotationRegistry::registerLoader('class_exists'); 
$config->setMetadataDriverImpl($driver); 

$em = EntityManager::create($connectionParams, $config); 

$user = $em->find('Users', 5); 
+1

它的工作原理!非常感謝! – KennyPowers 2013-02-27 12:23:39

+9

Doctrine 2.3的Setup :: createAnnotationMetadataConfiguration有一個名爲$ useSimpleAnnotationReader的第五個參數,您可以通過false來使其工作! – Malte 2013-05-01 21:00:00

+2

拯救生命。作爲新學說的人士,這非常有幫助。 – 2013-06-15 02:58:27

5

您可以使用配置的固定版本,只提供虛假的用簡單的註釋讀者,這樣的。

<?php 

//same code 

$isSimpleMode = FALSE; 
$proxyDir = null; 
$cache = null; 
$config = Setup::createAnnotationMetadataConfiguration(
$paths, $isDevMode, $proxyDir, $cache, $isSimpleMode 
); 

//same 
?> 
17

在我而言,我只是忘了補充@ORM\Entity,像這樣:

/** 
* Project\BackendBundle\Entity\Pedido 
* 
* @ORM\Table 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks 
*/ 
class Pedido 
5

就我而言,我是因爲我有/***代替/**打開了文檔塊收到此錯誤:

/*** 
* @entity 
* @table(name="bans") 
*/ 
+1

而我有'/ *'而不是'/ **'。謝謝! – deltab 2016-10-07 13:17:24

1

以下是奧克拉米烏斯的回答(也拯救了我)

如果你有你的實體一些自定義命名空間確保註釋來命名空間decleration後,這裏是我的實體,它的工作:

<?php 


namespace App\Models; 

/** 
    * Books 
    * 
    * @ORM\Table(name="books") 
    * @ORM\Entity 
    */ 

    use Doctrine\ORM\Mapping as ORM; 


    class Books 
    { 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=20, nullable=true) 
    */ 
    private $name; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="isbn", type="string", length=20, nullable=true) 
    */ 
    private $isbn; 

然後在我的控制器:

$entityManager->find('App\Models\Books', 1) 

成功!

相關問題