0

私は Doctrine2 を初めて使用し、カスタム リポジトリをセットアップしようとしていますが、Google で抜け出せないように見えるエラーが発生しています。

エンティティは次のとおりです。

// 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でクラスEntities\Customerを再宣言できません

PHP 5.4.6、コンポーザ経由でインストールされたドクトリン。

ブートストラップ.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);

私は何を間違っていますか?

4

1 に答える 1

0

この作品を手に入れました。問題は私が投稿したものとは何の関係もないようですが、これをテストするために使用したコードとは関係ありません。エグゼクティブ サマリー (今では明らかなように思えます) の->find()メンバーEntityManager->getRepository()リターンはまったく同じではありません。それを名前空間なしでクラスを参照することと組み合わせると、次のようになります。

私が持っていた:

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

2行目のコメントを外して機能させようとしていました。私はここで少し推測していますが、何が起こったのかは、これがどういうわけかドクトリンがクラスCustomer(ではないEntity\Customer)を探す原因になったと信じていentitiesます。Customer.php喜んでロードしようとします。

Entity/Customerそして、はい、それは探していたクラスでさえなかった を再定義します。

さらに、トランザクション エラーが発生することを修正したら、リポジトリ (これは既に に適していますEntity/Customer) が最初の引数としてクラスの名前を必要としないためです (振り返ってみると、もちろん!)。

Doctrine から得られるエラー メッセージは、これまでのところ、本質的に役に立たないことが常に証明されていると言わざるを得ません。これは採用するかどうか心配です。

これを見て時間を割いてくれた皆さん、そしてこれを Doctrine ではなく Doctrine2 として適切にタグ付けしてくれた皆さんに感謝します。

これを参照用に使用する正しい方法:

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

また

$em->getRepository('Entity\Customer')->getAllEnterprises();
于 2013-01-17T02:26:04.103 に答える