等价原则

Ham*_*bot 5 symfony doctrine-orm

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

Purchase
- id
- status_id

Product
- id
- name

ProductPurchase
- id
- product_id
- purchase_id
- quantity
Run Code Online (Sandbox Code Playgroud)

我需要查询所有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();
Run Code Online (Sandbox Code Playgroud)

然而,我在学说文档中找不到任何类似的解决方案,并且我确信我没有正确的关键字来进行搜索......

非常感谢您的帮助!

Wil*_*ilt 3

使用学说查询构建器,您可以这样做:

$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();
Run Code Online (Sandbox Code Playgroud)

p您的购买和innerjoinon ProductPurchase(别名pppp.product_id设置也是如此Y,以确保我们只获得那些具有此类关系/关联的购买。