2016-11-28 21 views
2

這裏有一個簡單的採購/產品關係的一些表:主義WhereHas等效

Purchase 
- id 
- status_id 

Product 
- id 
- name 

ProductPurchase 
- id 
- product_id 
- purchase_id 
- quantity 

我需要查詢所有Purchases有一個status_id = X,而且至少有一個ProductPurchase其中product_id = X

我來自Laravel環境,所以我之前做的事情就像這樣:

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

但是我無法找到任何類似的解決方案成學說文件,我相信我沒有正確的關鍵字,讓我的搜索...

非常感謝您的幫助!

+0

我在我的答案中將'product_id'改爲'Y',因爲我假設'status_id'和'product_id'在這裏不是同一個東西/值... – 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)其中pp.product_id設置爲Y確保我們只得到那些有這樣的關係採購/協會。

+0

謝謝,很好用! – Hammerbot