So erhalten Sie Teilergebnisse aus dem Doctrine Query Builder

Ich habe eine Produktentität, in der es ein Array als Attribute hat:

     /**
     * @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();
    }

Jetzt habe ich in meinem Abfrage-Generator den folgenden Code:

 $query = $em->createQueryBuilder()->select('p')
            ->from("SiteMainBundle:Product", 'p')
            ->innerJoin('p.category', 'c')
            ->innerJoin('p.shop', 'shop')
            ;

Das Problem hier ist, dass ich nicht alle Attribute von p auswählen möchte. Daher wollte ich nur das erste ProductPicture im Pictures-Array abrufen (in meinem obigen Fall ähnelt es der Methode getCover ()). Wie mache ich das?

Bisher kann ich die gewünschten Teilattribute herausfiltern:

 $query = $em->createQueryBuilder()->select('p.name, p.id')
                ->from("SiteMainBundle:Product", 'p')
                ->innerJoin('p.category', 'c')
                ->innerJoin('p.shop', 'shop')
                ->innerJoin('p.pictures', 'pictures')
                ;

also im obigen beispiel habe ich inner auf die bilder gesetzt, aber wie bekomme ich das erste element von hier?

Zusammenfassend ist meine Frage, wie ich das erste ProductPicture im Bilderarray mit dem Abfrage-Generator auswähle / abfrage. Denn wenn ich mache:

$ query = $ em-> createQueryBuilder () -> select ('p')

Es gibt die gesamten Produktattribute zurück, aber ich möchte nicht die gesamten Produktattribute. Ich wollte nur einige davon, wie z. B. die ID, den Namen usw. Eines der Produktattribute ist jedoch tatsächlich eine Entität (dies ist das ProductPicture) ), wie gebe ich das in der select-Anweisung zurück?

BEARBEITEN:

Hier ist ein SQL-Äquivalent dazu, wie die Bilder innerlich verbunden werden sollen:

SELECT * 
FROM  `product` 
JOIN  `product_picture` ON  `product`.id =  `product_picture`.product_id
WHERE  `product`.id =100
LIMIT 1

Antworten auf die Frage(2)

Ihre Antwort auf die Frage