0

我试图通过制作一个从我的数据库中获取信息的非常简单的脚本来学习使用Doctrine 2 。问题是我找不到任何解释 Doctrine 如何查找和使用我的映射实体的文档。所以当它抱怨它没有找到一个实体时,我不知道该怎么做才能解决这个问题。考虑我的 www 文件夹中的以下结构:

  • 教义/
  • 实体/
    • 人.php
  • 我的TestPage.php

人.php

<?php

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

我的TestPage.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] line 0, col 24 near 'person': Error: Class 'person' is not defined。在第 47 行的 C:\wamp\www\Doctrine\Doctrine\ORM\Query\QueryException.php

问题似乎是Doctrine找不到person.php,但是我该如何解决呢?

4

1 回答 1

2

我不完全知道“re1_chercheur”是什么意思,但是当我尝试你的代码时,它抱怨没有定义人,所以我把它包括在内并且它起作用了。当然,这应该通过使用某种自动加载器来解决,但我认为教义也有一些解决方案。我没有使用他们的自动加载器,因为我有我自己的,它使用符合 PSR 的自动加载器。

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

我发现教义文档很有帮助,只要确保你按照它的布局顺序进行,你很快就会掌握它的窍门。

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

于 2012-08-14T21:21:08.993 回答