2013-02-13 39 views
3

我已經定義的類設置是這樣的:如何解決類xxx是不是一個有效的實體或映射超類錯誤

<?php 

use Doctrine\ORM\Mapping as ORM; 

/** @ORM\Entity */ 
class Setting { 
    /** @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    * @ORM\id 
    */ 
    private $id; 

    /** @ORM\Column(length=255, nullable=true) */ 
    private $displayname; 

    /** @ORM\Column(length=255) */ 
    private $name; 

    /** @ORM\Column(type="text") */ 
    private $value; 

    public function __get($name) { 
     return $this->$name; 
    } 

    public function __set($key, $value){ 
     $this->$key = $value; 
    } 

    public function getFullName() { 
     return $this->name . ' suffix'; 
    } 


    public static function getValue($settingName) { 
     $result = ''; 
     try { 
      $setting = em()->createQuery('SELECT s FROM Setting s WHERE s.name = :name') 
       ->setParameter('name', $settingName) 
       ->getSingleResult(); 

      $result = $setting->value; 
     } 
     catch (\Doctrine\ORM\NoResultException $exception) { 

     } 

     return $result; 
    } 
} 

很不幸,這給出了一個錯誤致命錯誤:Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Setting" is not a valid entity or mapped super class.' in xxxxx/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php on line 216

怎麼可以這樣解決?

+0

在什麼名稱空間和文件夾是實體?檢查http://stackoverflow.com/questions/7820597/class-xxx-is-not-a-valid-entity-or-mapped-super-class-after-moving-the-class-i – 2013-02-13 10:27:58

回答

1

找到解決方案:看來問題在於使用SimpleAnnotationReader。

當像這樣配置annotationDriver(第二個參數應該是false)時,它可以工作。

$driver = $config->newDefaultAnnotationDriver(
    APPLICATION_PATH . '/models', false 
); 
+0

你在哪個文件中寫那個? – mlwacosmos 2013-12-05 10:37:32

3

爲了解決這個問題,我在最後一個參數來調用Setup::createAnnotationMetadataConfiguration假避免使用SimpleAnnotationReader的,因爲你需要AnnotationReader使用ORM \命名空間前綴。

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

$dbParams = array(
    'driver' => 'pdo_mysql', 
    'host' => '127.0.0.1', 
    'user' => 'root', 
    'password' => '', 
    'dbname' => 'db', 
); 

$path = __DIR__ . '/Entity'; 

$config = Setup::createAnnotationMetadataConfiguration(array($path), true, null, null, false); 

$entityManager = EntityManager::create($dbParams, $config); 
相關問題