2016-11-28 15 views
2

は簡単購入/製品関係のためにいくつかのテーブルです:教義WhereHas等価

Purchase 
- id 
- status_id 

Product 
- id 
- name 

ProductPurchase 
- id 
- product_id 
- purchase_id 
- quantity 

私はstatus_id = Xを持っているすべてのPurchasesを照会する必要があり、それはproduct_id = X

少なくとも一つ ProductPurchaseを持っています

私はLaravel環境から来たので、前にやっていたことは次のようなものでした:

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

私は教義のドキュメントに任意の同様な解決策を見つけることができないと私は私の検索をするために、正しいキーワードを持っていないことを確信していますが...

はあなたの助けのためにありがとうございました!

+0

私は 'status_id'と' product_id'が同じもの/値ではないと仮定しているので、私の答えで 'product_id'を' Y'に変更しました... – Wilt

答えて

1

a doctrine query builderを使用すると、このようなことを行うことができます。

$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(); 

だから、pご購入とProductPurchaseinnerjoin(別名pp)があるが、どこYからpp.product_idセットは、我々は唯一のそのような関係を持っているそれらの購入を取得確認します/協会。

+0

ありがとう、素晴らしい作品です! – Hammerbot