2012-03-04 16 views
0

に新しいエントリを挿入しながら、私は教義2.2との奇妙な問題を抱えています。私はデータベースに新しいエントリを挿入しようとし、私は次の問題に直面した。それはどういう意味ですか、どのように解決できますか?キャッチされない例外データベース

Fatal error: Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class Model\User is not a valid entity or mapped super class.' in C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\MappingException.php:147 
Stack trace: 
#0 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\Driver\AnnotationDriver.php(166): Doctrine\ORM\Mapping\MappingException::classIsNotAValidEntityOrMappedSuperClass('Model\User') 
#1 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\ClassMetadataFactory.php(293): Doctrine\ORM\Mapping\Driver\AnnotationDriver->loadMetadataForClass('Model\User', Object(Doctrine\ORM\Mapping\ClassMetadata)) 
#2 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\ClassMetadataFactory.php(178): Doctrine\ORM\Mapping\ClassMetadataFactory->loadMetadata('Model\User') 
#3 C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\EntityManager.php(271): Doctrine\ORM\Mapping\ClassMetadataFactory->getMe in C:\xampp\htdocs\www\DoctrineExplained\DoctrineORM\Doctrine\ORM\Mapping\MappingException.php on line 147 

私のプロジェクトのディレクトリ構造は次のようである:

./test

DoctrineORM/

DoctrineORM/binに

DoctrineORM/binに/ドクトリン

モデル/

モデル/ User.php

test.phpを

そして最後に、それらは、テストの私のコードです。 PHPモデル/ User.php

--- Model/User.php --- 
<?php 
// Model File model/User.php 
namespace Model; 

/** @Entity @Table(name="users") */ 
class User 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    public $id; 


    /** @Column(type="string", length=50) */ 
    public $name; 


    /** @Column(type="integer", length=50) */ 
    public $age; 
} 
?> 

そして最後のコードはtest.phpを

<?php 
//// test.php 


require 'DoctrineORM/Doctrine/Common/ClassLoader.php'; 
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', 'DoctrineORM'); 
$classLoader->register(); 

$classloader = new \Doctrine\Common\ClassLoader('model', __DIR__); 
$classloader->register(); 

$config = new \Doctrine\ORM\Configuration(); 
$cache = new \Doctrine\Common\Cache\ArrayCache(); 
$config->setMetadataCacheImpl($cache); 
$config->setQueryCacheImpl($cache); 

$driverImpl = $config->newDefaultAnnotationDriver('model'); 
$config->setMetadataDriverImpl($driverImpl); 
$config->setProxyDir('proxies'); 
$config->setProxyNamespace('proxies'); 

$config->setAutoGenerateProxyClasses(true); 
$config->getAutoGenerateProxyClasses(); 

$connectionOptions = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => 'root', 
    'password' => '0000' 
); 

$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config); 



// insert a new User to DB 
$user = new model\User(); 
$user->name = 'lorem impum user'; 
$user->age = 55; 
$em->persist($user); 
$em->flush(); 
+0

ORMを実行してみましょう:ドクトリン2 CLIツールでスキーマを検証する - 出力とは何ですか?それは検証されますか? –

+0

申し訳ありませんが、私はLinux上でこれを開発していません。(Windowsの場合)ウィンドウでどのように実行できますか? –

+0

こちらの手順を試してみてください:http://codeutopia.net/blog/2008/07/28/setting-up-command-line-php-on-windows/ - phpコマンドを設定したら、 //docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/tools.html**:私はそこに使用する必要がコマンド教義ツール –

答えて

0

でもWindows上にあり、大文字と小文字の区別は重要です。コード内に 'model'の代わりに 'Model'を使用してください。

追加 '使用モデル/ユーザー;'テストコードの上に '$ user = new User()'を使用します。これはあなたのクラスローダーが動作していることを確認します。

そして(ヤニが示唆したように)、コマンドラインからこのようなものを実行する方法を見つけ出すのに時間がかかりません。あなたの開発ははるかに高速になります。