以下是一些简单购买/产品关系的表格:
Purchase
- id
- status_id
Product
- id
- name
ProductPurchase
- id
- product_id
- purchase_id
- quantity
我需要查询Purchases
的所有status_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 :(得分:2)
使用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
是您的购买行为,innerjoin
ProductPurchase
{别名pp
)pp.product_id
设置为Y
,确保我们只获得那些有这种关系/关联的购买。