1

doctrine2で、フォルダー内に作成entitiesしました。Entities

フォルダ:

./
    HelloEntity.php
    WorldEntity.php

PHP で構造を作成し、インポートします。

$namespaceYaml = array($connection->getBundle()->getNamespace() => $bundleFolder.'/Entity/ORM/');
$driver = new YamlDriver($namespaceYaml, '.orm.yml');
$path = $bundleFolder.'/Resource/config/doctrine/metadata/orm';
$config = Setup::createYAMLMetadataConfiguration(array($path), true);
$config->setEntityNamespaces(array($connection->getBundle()->getName() => $connection->getBundle()->getNamespace().'\Entity'));
$config->setMetadataDriverImpl($driver);

今、それは働いています。私はそれらを使用することができます。

例えば:

$qb = $this->getRepository()->createQueryBuilder('Hello'); //short here but long in from()
$qb->from('MyWeb\Entities\Hello', 'h'); //Hello Entity

今、MyWeb私のメインのルート/名前空間です。テーブルで教義を使用したいときは、書く必要がありますMyWeb\Entities\Hello。私がやりたいのは、それらを短くすることだけです。使えない'Hello'

誰にもアイデアはありますか?

4

2 に答える 2

3

今のところ、StackOverflowのどこかで答えを見つけました。同じ質問ではありませんが、両方に答えているようです。

間もなく、テーブル名には短い名前空間ではなく、完全修飾の名前空間を使用する必要があります。ただし、リポジトリを取得するときに短い名前を使用できます(バンドル名以外)

参照:Doctrine DQLと名前空間(相対のみ?)

今、私は答えを見つけました。

回答

私の以前の解決策は正しいです。最初のstrでスラッシュを除いた完全修飾名前空間を使用する必要があります。

でも、簡単に使うこともできます。

を参照してください。すべてentityManmagerにがありRepository、を使用して取得できます$em->getRepository()。その後、with (ここでは「 ecreateQueryBuilder('e') 」に注意)は名前自体を生成し、それをエイリアスに割り当てます。HelloEntitye

だから、私のコードは間違っていて、名前空間を入力する必要はありません:)

結論

これの代わりに:

$qb = $this->getRepository()->createQueryBuilder('Hello'); //short here but long in from()
$qb->from('MyWeb\Entities\Hello', 'h'); //Hello Entity

これを使って:

$qb = $this->getRepository()->createQueryBuilder('h'); //h assigned for Hello table and HelloEntity. So no need for from. It will fetch data two times then.

解決しました。

修正とアイデアは次のとおりです。Doctrine2は各レコードの5つのコピーをフェッチします

于 2012-10-23T19:06:48.410 に答える
3

純粋な php で doctrine2 を試したことはありませんが、この行はオートローダーの設定のように見えます:

$config->setEntityNamespaces(array($connection->getBundle()->getName() => $connection->getBundle()->getNamespace().'\Entity'));

MyWeb\ Entity \Hello のようなディレクトリ/名前空間構造を使用すると、必要に応じて機能する可能性があります

于 2012-10-23T18:47:11.627 に答える