1

KnpLabs/DoctrineBehaviorsの Translatable trait をCategory エンティティの「プロキシ翻訳」で使用しているため、プロパティ「name」を含む CategoryTranslation エンティティがあります。すべてのカテゴリのリストを取得したい場合は、 symfony のデバッグ ツールバーは、ページが何千ものクエリを実行し、読み込みに 5 秒以上かかったと教えてくれます。

これは私のコードです:

$categories = $this->getDoctrine()
    ->getManager()
    ->getRepository('OylexCategoryBundle:Category') 
    ->findAll();

$categoryList = array();

foreach ($categories as $category) {
    $categoryList[] = array(
        'id' => $category->getId(),
        'name' => $category->getName(),
    );
}

//To output as json

ご覧のとおり、この行'name' => $category->getName(),は foreach ループの反復ごとに新しいクエリを作成しています。

「名前」プロパティがカテゴリと一緒にフェッチされるように変換テーブルに参加する方法はありますか?

私はこれを試しましたが、それでも呼び出しごとにクエリを実行しています:

$categories = $this->getDoctrine()
    ->getManager()
    ->getRepository('OylexCategoryBundle:Category')
    ->createQueryBuilder('c')
    ->select(array('c'))
    ->leftJoin('OylexCategoryBundle:CategoryTranslation', 'ct', 'WITH', 'c.id = ct.translatable AND ct.locale = \'en\'')
    ->getQuery()
    ->getResult();

ありがとう、

4

1 に答える 1

4

トリックは、翻訳可能なモジュールによって与えられたマップされたフィールドを使用して結合することです:

->innerJoin('c.translations', 'ct')
于 2013-08-28T15:11:21.433 に答える