1

私は2つのテーブルを持っています:

  products       products_images
   -id            -id
   -name          -product_id
                  -image_name

productからproducts_imagesテーブルへの1対多の関係があります

ProductとProductImageの関係で定義された2つのエンティティを作成しました

製品とその画像のリストを取得する必要がありますが、画像の記録を1つに制限しています。

現在、私はこれをしました:

$product = $this->getDoctrine()
            ->getRepository('TestBundle:Product');

次に、小枝テンプレートで:

{% for image in product.images if loop.first %}
{% endfor %}

このループを使用して、その製品の1つの画像をフェッチしました。その製品のすべての画像を取得しているので、これが効率的な方法だとは思いません。私がやりたいのは、データベースから製品ごとに1つの画像だけをフェッチすることです。これどうやってするの ?

4

1 に答える 1

2

Product-entityに、のような別のメソッドを追加しgetThumbnailます。これは、どの画像がサムネイルと見なされるかのロジックをカプセル化します(つまり、ビューには、最初、最後、またはその他の製品画像を表示するかどうかのロジックは含まれず、製品にサムネイルを要求するだけです)。

ビューで

{% if product.thumbnail %}
  {{ // Output the product.thumbnail-entity }}
{% endif %}

エンティティ内

public function getThumbnail ()
{
   return $this->getImages()->first();
}

ここで、プロファイリング後、単一の画像/製品のみが表示されているときに完全な画像コレクションが読み込まれることが懸念される場合は、リポジトリDQLを更新して、単一の画像のみをフェッチして参加するか、関連付けを確認します画像にEXTRA_LAZY

于 2013-01-07T11:26:59.417 に答える