学说何处等同

时间:2016-11-28 16:28:14

标签: symfony doctrine-orm

以下是一些简单购买/产品关系的表格:

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

但是,我无法在学说文档中找到任何类似的解决方案,我相信我没有正确的关键字来进行搜索......

非常感谢你的帮助!

1 个答案:

答案 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 {别名pppp.product_id设置为Y,确保我们只获得那些有这种关系/关联的购买。