Doctrine Custom Repositories - Redeclared class error

时间:2013-01-16 03:49:36

标签: php doctrine-orm

我是Doctrine2的新手,我正在尝试设置自定义存储库,但是我收到了一个错误,我似乎无法用谷歌来解决这个问题:

这是实体:

// entities/Customer.php
namespace Entities;

/** @Entity (repositoryClass="Repositories\CustomerRepository") 
 *  @Table (name="customer") */
class Customer { /* ... */ }

这是存储库:

// repositories/CustomerRepository.php
namespace Repositories;
use Doctrine\ORM\EntityRepository;

class CustomerRepository extends EntityRepository {
  public function getAllEnterprises() {
    return $this->_em->createQuery(
      'SELECT c FROM Customer c WHERE column_x IS NOT NULL')->getResult();
  }
} 

PHP对我大吼大叫说:

  

PHP致命错误:无法重新声明类实体\客户   第10行的entities / Customer.php

PHP 5.4.6,通过composer安装的学说。

bootstrap.php中:

// bootstrap.php
if (!class_exists('Doctrine\Common\Version', false)) {
  require_once "bootstrap_doctrine.php";
}

require_once "entities/Customer.php";
require_once "repositories/CustomerRepository.php";
require_once "entities/Location.php";

bootstrap_doctrine.php

// bootstrap_doctrine.php
use Doctrine\ORM\Tools\Setup;
require_once "vendor/autoload.php";

// Create a simple "default" Doctrine ORM configuration 
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(
            array(__DIR__."/entities"), $isDevMode);

// database configuration parameters
$conn = array(
  'driver'      => 'pdo_mysql',
  'host'        => 'localhost',
  'user'        => 'someuser',
  'password'    => 'somepassword',
  'dbname'      => 'somename',
  'unix_socket' => '/var/run/mysqld/mysqld.sock',
);

// obtaining the entity manager
$entityManager = \Doctrine\ORM\EntityManager::create($conn, $config);

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我得到了这个工作。看来这个问题与我发布的内容无关,但是用我用来测试这个的代码。执行摘要(现在看来显而易见)->find()成员EntityManager->getRepository()返回的内容完全不同。将它与引用类没有它的命名空间相结合,这就是发生的事情:

我有:

$customer = $em
  // ->getRepository('Customer')
  ->find('Customer', (int)$cid);

并试图取消对第二行的注释。我在这里猜一点,但我相信发生的事情是这会导致学说寻找一个班级Customer(而不是Entity\Customer),我告诉它我将我的实体留在{{1文件夹..然后它找到了一个entities ...它很乐意尝试加载。

是的,这将重新定义Customer.php,这甚至不是它所寻找的类。

此外,一旦我修复了你得到一个事务错误,因为存储库(已经是Entity/Customer的正确存储库)不需要该类的名称作为第一个参数(当然,回想起来,当然!)。

我不得不说,我从Doctrine获得的错误消息到目前为止一直被证明是无用的。这让我担心采用它。

感谢所有花时间看这个的人,以及任何正确标记为Doctrine2而不是Doctrine的人。

使用此参考的正确方法:

Entity/Customer

$em->getRepository('Entity\Customer')->find((int)$cid);