2017-06-26 5 views
4

でモデルを整理:私はちょうど私がデータベースからオブジェクトを取得する必要があるとき、私はこのようなものを使用する必要があります公式のsymfonyの3ドキュメントとポイントを読んでsymfonyの3

$repository = $em->getRepository('AppBundle:Product'); 

ここで製品が無いとばかりエンティティクラスであります親であるので、Doctrineはアノテーションを使ってそれを処理します。しかし、モデル名を引用符でハードコードすることをお勧めします。後でモデルの名前をとすれば、プロジェクト全体を検索して良品で置き換えるべきです。私はLaravelのために、それぞれのモデルは基底モデルクラスを拡張するので、書くことができます:Product::model()->find('nevermind')。 symfony 3.3にこのようなオプションはありますか?

+0

この例では、「変化する製品」が得られませんでした。いずれの場合も、すべての単一の部分をリファクタリングする必要があります。 Product :: model() - > Good :: model() '、' 'AppBundle:Product ' - >' AppBundle:Good''、' Product :: class - > Good :: class'はそれですか?私は最も近いのが@COil Btwの答えだと思います。教義はここでは異なるアプローチをしています。モデルはデータベースやリポジトリについて何も知ってはいけません。可能な限り少ない依存関係が必要です。良いides /プラグインもこれを解決できます。 – user254319

答えて

3

それはあなたの問題の解決策である場合、私はSHUREないんだけど、あなたは書くことができます。

$repository = $em->getRepository(Product::class); 
+0

ありがとうございます。私はまだそれを試していないが、かなり良いように見える。少なくとも引用符は見えない=) –

1

$em->getRepository('...')戻っ混合データ型(最初のパラメータに依存します)。 $repository = $em->getRepository(Product::class);と書いてもIDEは実データ型を解決できません。私は(擬似コード)は、この方法をお勧め:

/** 
* Get product repo 
* 
* @return ProductRepository 
*/ 
public function getProductRepository() 
{ 
    return $this->getEntityManager()->getRepository(Product::class); 
} 

/** 
    * @return \Doctrine\ORM\EntityManager 
    */ 
public function getEntityManager(): EntityManager 
{ 
    return $this->getDoctrine()->getManager(); 
} 
1

あなたはこのようなサービスとしてリポジトリを宣言することができます。あなたのコントローラに続いて

services: 
    app.product_repo: 
     class: AppBundle\Entity\ProductRepository 
     factory: ['@doctrine.orm.default_entity_manager', getRepository] 
     arguments: 
      - AppBundle\Entity\Product 

$repository = $em->get('app.product_repo'); 

まあ、少なくともそれをPHPStormとそのSymfonyプラグインで動作します。サービスの自動補完は本当に必要です。

関連する問題