属性として配列を持つ製品エンティティがあります。
/**
* @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();
}
クエリビルダーには、次のコードがあります。
$query = $em->createQueryBuilder()->select('p')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
;
ここでの問題は、p のすべての属性を選択したくないということです。そのため、pictures 配列の最初の ProductPicture だけを取得したかったのです (上の私の場合は、getCover() メソッドに似ています)。どうすればいいですか?
これまでのところ、次のようにして、必要な部分属性を除外できます。
$query = $em->createQueryBuilder()->select('p.name, p.id')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
->innerJoin('p.pictures', 'pictures')
;
上記の例では、写真で内部結合を行っていますが、ここから最初の要素を取得するにはどうすればよいですか?
結論として、私の質問は、クエリ ビルダーを使用して、写真配列の最初の ProductPicture を選択/クエリするにはどうすればよいですか? 私がするとき:
$query = $em->createQueryBuilder()->select('p')
製品属性全体を返しますが、製品属性全体は必要ありません.ID、名前など、それらの一部のみが必要でした.しかし、製品属性の1つは実際にはエンティティです(これはProductPictureです) ) では、select ステートメントでこれを返すにはどうすればよいでしょうか?
編集:
これは、画像を内部結合する方法に相当する SQL です。
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1