18

私はSymfony2のドキュメントを使用します。追加すると言われています

/**
 * @ORM\Entity(repositoryClass="Acme\StoreBundle\Entity\ProductRepository")
 */

私のエンティティファイルで実行するとphp app/console doctrine:generate:entities Acme、ファイルが作成されProductRepositoryます。そうではありません。これ以上明確にすることはできません。ファイルを作成せず、以前に存在していたエンティティファイルを再作成するだけです。

4

6 に答える 6

26

私は同じ問題を抱えています

しかし、私はここで答えを見つけました:http: //brentertainment.com/other/docs/book/doctrine/orm.html

repositoryClassマッピングを追加する前にエンティティクラスをすでに生成している場合は、自分でクラスを作成する必要があります。幸いなことに、それは非常に簡単です。バンドルのリポジトリディレクトリにクラスを作成し、Doctrine \ ORM\EntityRepositoryを拡張していることを確認してください。クラスを作成したら、エンティティをクエリするための任意のメソッドを追加できます。

簡単です。これはすでに一度実行したので、手動で実行する必要があります。

于 2013-02-21T17:59:58.347 に答える
8

特定のバンドルを指定してみることができます。

php app/console doctrine:generate:entities AcmeStoreBundle

私は完全なバンドル名を持っていることに注意してください。

これは、前に実行した場合でも役立ちますdoctrine:generate:entities

于 2014-03-12T07:14:12.317 に答える
8

orm.ymlファイルを使用してエンティティを生成している場合は、repositoryClassを定義してから、エンティティを再度生成できます。

Acme\StoreBundle\Entity\Product:
type: entity
table: product
...
repositoryClass: Acme\StoreBundle\Entity\ProductRepository
...

そして、実行します:

php app/console doctrine:generate:entities AcmeStoreBundle
于 2015-02-02T03:28:49.207 に答える
2

これに対する非常に簡単な解決策:

まだ行っていない場合は、エンティティを生成します。

php app/console doctrine:generate:entity --entity="AppBundle:EntityName" --fields="id:string(255) content:text(100)"

次に、これらのコメント行を以前に生成したエンティティに変更します。

* @ORM\Table(name="TABLENAME")
* @ORM\Entity(repositoryClass="AppBundle\Entity\EntityNameRepository")

今、実行するだけです:

php app/console doctrine:generate:entities AppBundle:EntityNameRepository

これで、エンティティとリポジトリができました。:)

于 2015-09-24T15:39:20.387 に答える
1

この問題を取り除き、リポジトリクラスを生成するには、次のファイルの末尾を一時的に変更しますsymfony \ vendor \ doctrine \ doctrine-bundle \ Doctrine \ Bundle \ DoctrineBundle \ Command \ generateEntitiesDoctrineCommand.php

if ($m->customRepositoryClassName 
   && false !== strpos($m->customRepositoryClassName, $metadata->getNamespace())) {
     $repoGenerator->writeEntityRepositoryClass(
        $m->customRepositoryClassName, $metadata->getPath());
}

次のコードで:

if (true) { 
   $output->writeln(
     sprintf('  > AND Repository <comment>%s</comment>', $m->name . "Repository")
   );           
   $repoGenerator->writeEntityRepositoryClass(
     $m->name . "Repository", $metadata->getPath());
} 

いくつかの説明:このコードでは、

  • if条件は' if(true) 'で簡略化されます(必要に応じて最終的に完全に抑制できます)
  • $m->customRepositoryClassNameは $m->name。"Repository"に置き換えられます
  • リポジトリファイルが生成されたときに(ターミナルウィンドウで)十分な情報が得られるように、いくつかの出力を追加しました。

' if(true) '条件を使用せず、自分で確認したい場合は、出力付きの通性elseケースを追加して、将来的に十分な情報を得ることができます。

   else {
       $output->writeln(sprintf('  > NO repository generated for this class'));
    }

変更後、通常どおりコマンドを再実行できます。

php app/console doctrine:generate:entities AcmeStoreBundle

これは一時的なコードです。これまで問題はあまり明確ではなかったため、空の文字列を返す$m->customRepositoryClassNameから発生しているように見えるだけです。したがって、別の決定的な解決策を見つけるには、メタデータオブジェクトのメソッドcustomRepositoryClassNameを確認する方法があります...

于 2014-10-09T00:33:14.610 に答える
-3

Astucieuxの答えに基づいています:

if (true) { 
    $fullRepositoryClassName = $name . "\\Repository\\" . $basename . "Repository";
    $output->writeln(
        sprintf('  > AND Repository <comment>%s</comment>', $fullRepositoryClassName)
    );           
    $repoGenerator->writeEntityRepositoryClass(
        $fullRepositoryClassName, $metadata->getPath());
} 
于 2015-01-12T16:49:10.400 に答える