为什么Doctrine 2找不到我的实体?

时间:2012-08-14 20:55:29

标签: php doctrine-orm

我正在尝试通过创建一个从我的数据库中获取信息的非常简单的脚本来学习使用Doctrine 2。问题是我找不到任何解释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'   消息'[Semantical Error]第0行,第24位'person'附近:   错误:未定义类'person'。在   第47行的C:\ wamp \ www \ Doctrine \ Doctrine \ ORM \ Query \ QueryException.php

问题似乎是Doctrine找不到person.php,但我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:2)

我并不完全知道“re1_chercheur”的意思,但是当我尝试你的代码时,它抱怨没有被定义的人,所以我包含了它并且它有效。 当然,这应该通过使用某种类型的自动加载器来处理,但我认为学说也有一些解决方案。我没有使用他们的自动加载器,因为我有自己的自动加载器使用PSR兼容自动加载。

同样在你的选择中,如果你只想要“uid”,请使用“t.uid”。 “t”是person类的别名,因此在查询的其他位置,您将使用“t”来获取它的属性(您可以执行 - &gt; where(“t.uid = someNumber”) )。如果你想要整个对象使用select(“t”);

我发现doctrine documentation非常有帮助,只要确保按照布局的顺序进行,你就可以立刻掌握它。

我知道这不是一个确切的答案,但也许它指出了你正确的方向。