sonam
sonam

Reputation: 3770

writing doctrine query with symfony 2

i have two tables:

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

There is one to many relation from product to products_images table

I have created two entities with its relation defined as: Product and ProductImage

I need to get list of products and its images but the limiting the record of no of images to 1.

Currently, I did this :

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

Then in the twig template:

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

I used this loop to fetch one image for that product. I dont think this is efficient way to do since i have fetching all the images for that product. What I want to do is just fetch only one image per product from the database? How can i do this ?

Upvotes: 1

Views: 238

Answers (1)

PatrikAkerstrand
PatrikAkerstrand

Reputation: 45731

I'd add another method to the Product-entity, something like getThumbnail. This encapsulates the logic of which image is considered the thumbnail (i.e your view does not contain any logic of whether to display the first, last or any other product image, it just asks the product for its thumbnail):

in the view

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

In the entity

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

Now, after profiling, if you're concerned that the full image collection is loaded when only a single image/product is shown, then I'd update the repository DQL to only fetch-join a single image, or make sure that the association to the images is EXTRA_LAZY

Upvotes: 2

Related Questions