Jak uzyskać częściowy wynik z konstruktora zapytań doktrynalnych
Mam obiekt produktu, w którym ma tablicę jako atrybuty:
/**
* @ORM\OneToMany(targetEntity="Shopious\MainBundle\Entity\ProductPicture", mappedBy="product", cascade={"persist","remove"})
*/
protected $pictures;
/**
* @Accessor(getter="getCover")
*/
private $cover;
public function getCover()
{
if($this->pictures->count() > 0) {
return $this->pictures[0];
}
return new ProductPicture();
}
Teraz w moim konstruktorze zapytań mam następujący kod:
$query = $em->createQueryBuilder()->select('p')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
;
Problem polega na tym, że nie chcę wybierać wszystkich atrybutów p. Chciałem więc tylko uzyskać pierwsze ProductPicture w tablicy obrazów (w moim przypadku powyżej jest to podobne do metody getCover ()). Jak mam to zrobic?
Do tej pory mogę odfiltrować częściowe atrybuty, które chcę:
$query = $em->createQueryBuilder()->select('p.name, p.id')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
->innerJoin('p.pictures', 'pictures')
;
więc w powyższym przykładzie zrobiłem wewnętrzne zdjęcia na zdjęciach, ale jak mogę uzyskać pierwszy element stąd?
Podsumowując, moje pytanie brzmi: jak wybrać / zapytać pierwszy ProductPicture w tablicy obrazów za pomocą kreatora zapytań? Bo kiedy to robię:
$ query = $ em-> createQueryBuilder () -> select ('p')
zwraca wszystkie atrybuty produktu, ale nie chcę całych atrybutów produktu. Chciałem tylko niektórych z nich, takich jak identyfikator, nazwa itp. Jednak jeden z atrybutów produktu jest w rzeczywistości jednostką (która jest ProductPicture ), więc jak mogę to zwrócić w instrukcji select?
EDYTOWAĆ:
Oto odpowiednik SQL na to, jak obrazy powinny być połączone wewnętrznie:
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1