0

データベースから情報を取得する非常に単純なスクリプトを作成して、Doctrine2の使用方法を学習しようとしています。問題は、Doctrineがマッピングエンティティを見つけて使用する方法を説明するドキュメントが見つからないことです。そのため、エンティティが見つからないと文句を言うと、問題を解決するために何をすべきかわかりません。私のwwwフォルダにある次の構造を検討してください。

  • 教義/
  • エンティティ/
    • person.php
  • myTestPage.php

person.php

<?php

/** @Entity @Table(name="person")*/
class person
{
    /**
     * @Id @Column(type="integer")
     */
    protected $uid;
}
?>

myTestPage.php

<?php
    require "Doctrine/Doctrine/ORM/Tools/Setup.php";

    $lib = "Doctrine";
    Doctrine\ORM\Tools\Setup::registerAutoloadDirectory($lib);

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

    $paths = array("/Entities");

    $isDevMode = true;

    $dbParams = array("driver" => "pdo_mysql",
        "host" => "myhost.ca",
        "user" => "Shawn",
        "password" => "noneofyourbusiness",
        "dbname" => "testDB");

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

    $qb = $em->createQueryBuilder();
    $qb->select(array('uid'))
        ->from('person', 't');
    $query = $qb->getQuery();

    $result = $query->getResult();
    echo $result;
?>

myTestPage.phpにアクセスすると、次のエラーメッセージが表示されます。

致命的なエラー:キャッチされない例外'Doctrine \ ORM \ Query\QueryException'とメッセージ'[SemanticalError] line 0、col 24 near' person':Error:Class' person' isnotdefined。' C:\ wamp \ www \ Doctrine \ Doctrine \ ORM \ Query\QueryException.phpの47行目

問題は、Doctrineがperson.phpを見つけられないことのようですが、どうすればこれを解決できますか?

4

1 に答える 1

2

「re1_chercheur」の意味はよくわかりませんが、コードを試してみると、人が定義されていないと文句を言っていたので、それを含めて動作しました。もちろん、これはある種のオートローダーを使用して対処する必要がありますが、Doctrineにはその解決策もあると思います。私はPSR準拠のオートローディングを使用する独自のオートローダーを持っているため、オートローダーを使用していません。

また、選択で「uid」だけが必要な場合は、「t.uid」を使用します。「t」はpersonクラスのエイリアスであるため、クエリの他の場所では、「t」を使用してそのプロパティにアクセスします(-> where( "t.uid = someNumber")を実行できます)。 。オブジェクト全体が必要な場合は、select( "t");を使用します。

教義のドキュメントは非常に役に立ちました。レイアウトされている順序で実行するようにしてください。そうすれば、すぐにコツをつかむことができます。

これが正確な答えではないことは知っていますが、おそらくそれはあなたを正しい方向に向けさせます。

于 2012-08-14T21:21:08.993 に答える