Php 为什么';t理论2找到我的实体?

Php 为什么';t理论2找到我的实体?,php,doctrine-orm,Php,Doctrine Orm,我试图通过制作一个从我的数据库获取信息的非常简单的脚本来学习如何使用。问题是,我找不到任何解释Doctrine如何查找和使用我的映射实体的文档。所以当它抱怨说找不到实体时,我不知道该怎么解决这个问题。在WWW文件夹中考虑以下结构: 教义/ 实体/ person.php myTestPage.php person.php <?php /** @Entity @Table(name="person")*/ class person { /** * @Id @Colu

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

  • 教义/
  • 实体/
    • person.php
  • myTestPage.php
person.php

<?php

/** @Entity @Table(name="person")*/
class person
{
    /**
     * @Id @Column(type="integer")
     */
    protected $uid;
}
?>
<?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

<?php

/** @Entity @Table(name="person")*/
class person
{
    /**
     * @Id @Column(type="integer")
     */
    protected $uid;
}
?>
<?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时,会收到以下错误消息:

致命错误:未捕获异常“条令\ORM\Query\QueryException” 消息“[Semantic Error]第0行,第24列“person”附近: 错误:未定义类“person”。在 C:\wamp\www\Doctrine\Doctrine\ORM\Query\QueryException.php,第47行


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

我不知道“re1_Cherchur”到底是什么意思,但当我尝试你的代码时,它抱怨person没有定义,所以我把它包括进去,它就成功了。 当然,这应该通过使用某种自动装弹机来解决,但我认为条令也有一些解决方案。我没有使用过他们的自动装弹机,因为我有自己的自动装弹机,它使用符合PSR的自动装弹机

此外,在选择中,如果只需要“uid”,请使用“t.uid”。“t”是person类的别名,因此在查询的其他位置,您将使用“t”访问它的属性(您可以执行->where(“t.uid=someNumber”))。如果需要整个对象,请使用选择(“t”)

我发现这个方法很有用,只要确保你按照它的顺序去做,你很快就会掌握它的窍门


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

对不起,我忘记更改错误消息中的表名,它应该是
person
(我现在更改了它)。当我手动
需要“Entities/person.php”时,错误消息更改,并表示未定义uid。然后,我在表名之前添加
t.
,现在一切正常。所以你一直都是对的。自动加载器不工作,我可以通过手动要求类文件来解决这个问题。我想知道为什么自动加载器不起作用…我不知道doctrine的自动加载器,因为我使用我自己的,但正如我所说的,他们的文档非常清晰,有很好的例子,所以你应该不会遇到任何麻烦。实际上我确实遇到了一些麻烦。我用PEAR重新安装了条令,现在我使用
Setup::registerAutoloadPEAR()使它工作起来$cl=新条令\通用\类加载器(“实体”,目录)$cl->register()很高兴你让它工作了。很抱歉,我帮不上忙,但我不太乐意提供有关它的建议,因为我从未真正使用过它