2016-11-28 5 views
2

Hier sind einige Tische für eine einfache Kauf/Produkt Beziehung:Lehre WhereHas Equivalent

Purchase 
- id 
- status_id 

Product 
- id 
- name 

ProductPurchase 
- id 
- product_id 
- purchase_id 
- quantity 

Ich brauche alle Purchases abzufragen, die eine status_id = X haben, und dass mindestens eine ProductPurchase wo die product_id = X

Ich bin von der Laravel-Umgebung, also was ich vorher tat, war etwas wie:

$purchases = Purchase::where('status_id',$s_id) 
    ->whereHas(['productPurchases' => function ($query) use($product_id) { 
     $query->where('product_id',$product_id) 
    }])->get(); 

Jedoch kann ich keine ähnliche Lösung in der Doktrin-Dokumentation finden und bin sicher, dass ich nicht die richtigen Schlüsselwörter für meine Suche habe ...

Vielen Dank für Ihre Hilfe!

+0

Ich habe in meiner Antwort 'product_id' in' Y' geändert, da ich annehme, dass 'status_id' und' product_id' hier nicht das gleiche sind ... – Wilt

Antwort

1

Mit a doctrine query builder können Sie das wie folgt zu tun:

$status_id = X; 
$product_id = Y; 
$queryBuilder = $this->createQueryBuilder('p') 
    ->innerJoin('p.productPurchase', 'pp') 
    ->where('p.status = :status_id') 
    ->andWhere('pp.product = :product_id') 
    ->setParameters([ 
     'status_id' => $status_id, 
     'product_id' => $product_id, 
    ]); 
); 
$query = $queryBuilder->getQuery(); 
return $query->getResult(); 

So p ist der Kauf und die innerjoin auf ProductPurchase (alias pp), wo pp.product_id Satz Y stellt sicher, dass wir nur die Einkäufe erhalten, die eine solche Beziehung haben /Verband.

+0

Danke, funktioniert super! – Hammerbot