0

Laravel 8.x

我正在尝试做类似这里提到的事情

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

$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 的变量。这是有道理的,因为可以希望子查询是新鲜的。但是如果我想使用现有的查询呢?

我在许多其他人中使用了这个谷歌搜索来找到类似的问题。stackoverflow 上的结果似乎没有使用现有的查询,它们都添加了新from的 s 和wheres (参见这里这个高度评价的问题)。

4

1 回答 1

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();
于 2021-06-01T18:58:41.623 回答