Laravel Query Builder 在`whereIn` 语句的子查询中使用父查询?

时间:2021-06-01 17:38:44

标签: php laravel laravel-query-builder

Laravel 8.x

我正在尝试执行 here

中提到的类似操作

(从上面链接复制的代码-对评论的小改动)

$total = OrderTotals::whereIn('order_id', function($q) use($query) {
   // here would like to use the query of the parent instead of an empty fresh query
})->sum('value);

在调用 ->whereIn 时我想在子查询中使用上一个查询的地方,这可能我该怎么做?

闭包中的 $query 变量为空并产生一个 select *,没有任何 from 或 wheres。这是有道理的,因为可以希望子查询是新鲜的。但是如果我想使用现有的查询怎么办?

我使用了 this 谷歌搜索和许多其他搜索来找到类似的问题。 stackoverflow 上的结果似乎没有使用现有查询,它们都添加了新的 fromwhere(参见 herethis highly rated question)。

1 个答案:

答案 0 :(得分:0)

看看这样的事情是否有帮助

Model::where(function($query)
{
    $query->whereIn('order_id', [1,2,3]);

    //OR

    $query->or_where('order_id', function(){
         // do something
    });

})->where('other condition')->sum('value');

这也可以:

OrderTotals::addSelect(['order_id' => Order::select('id')
    ->whereColumn('active', 0)
    ->orderByDesc('completed_at')
])->sum();
相关问题