2012-08-14 101 views
0

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

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

person.php

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,我收到以下错误信息:

Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Semantical Error] line 0, col 24 near 'person': Error: Class 'person' is not defined.' in C:\wamp\www\Doctrine\Doctrine\ORM\Query\QueryException.php on line 47

这个问题似乎是学说无法找到person.php,但我该如何解决这个问题?

回答

2

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

同样在你的选择中,如果你只需要“uid”,使用“t.uid”。 “t”是人类的别名,所以在查询的其他地方,你会用“t”来获得它的属性(你可以做一个 - > where(“t.uid = someNumber”)) 。如果你想让整个对象使用select(“t”);

我发现doctrine documentation相当有帮助,只要确保按照它的布局顺序进行操作即可,而且您很快就会掌握它。

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

+0

对不起,我忘了更改错误信息中的表名,它应该说'人'(我现在改了它)。当我手动“需要”实体/ person.php“;”时,错误信息会改变,并说uid没有被定义。然后,我在表名前添加't.',现在一切正常。所以你一直都是对的。自动加载器不工作,我可以通过手动要求类文件解决该问题。我想知道为什么自动装载机不工作,虽然... – Shawn 2012-08-15 13:51:37

+0

我不知道关于主义的自动装载机,因为我用我自己的,但正如我所说,他们的文件是非常清楚,有很好的例子,所以你应该有通过这个没有麻烦。 – Pinetree 2012-08-15 22:41:47

+0

其实我确实有些麻烦。我用PEAR重新安装了Doctrine,现在我可以使用'Setup :: registerAutoloadPEAR(); $ cl = new Doctrine \ Common \ ClassLoader('Entities',__DIR__); $ cl-> register();' – Shawn 2012-08-16 14:32:20