3

私は次のようなクラス設定を定義しました:

<?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

これはどのように解決できますか?

4

2 に答える 2

3

この問題を解決するには、最後のパラメーターに false を指定してSetup::createAnnotationMetadataConfigurationを呼び出し、SimpleAnnotationReader の使用を避ける必要がありました。これは、ORM\ 名前空間プレフィックスを使用するには AnnotationReader が必要だからです。

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);
于 2013-04-03T15:00:35.570 に答える
1

解決策が見つかりました: 問題は SimpleAnnotationReader の使用にあるようです。

このようにannotationDriverを構成すると(2番目のパラメーターはfalseにする必要があります)、機能します。

$driver = $config->newDefaultAnnotationDriver(
    APPLICATION_PATH . '/models', false
);
于 2013-02-13T10:35:55.663 に答える