Laravel Query Builder 在“whereIn”语句的子查询中使用父查询?
Posted
技术标签:
【中文标题】Laravel Query Builder 在“whereIn”语句的子查询中使用父查询?【英文标题】:Laravel Query Builder use parent query in subquery of `whereIn` statement? 【发布时间】:2021-08-19 22:24:20 【问题描述】: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 *
,没有任何来自或哪里。这是有道理的,因为可以希望子查询是新鲜的。但是如果我想使用现有的查询呢?
我使用this google 搜索以及许多其他方法来查找类似问题。 *** 上的结果似乎没有使用现有查询,它们都添加了新的from
s 和where
s(参见here 和this highly rated question)。
【问题讨论】:
据我了解,您需要 OrderTotals,他们的 order_id 在 [...] 中,如果满足某些条件,您希望获得它们的总数。 我想要他们的 order_id 在子查询中的位置,而不是数组。如果我执行 whereIn 并传递一个闭包,那么这就是一个子查询。问题是我希望子查询成为父查询,但 whereIn 并不能让您处理父查询,而只能处理新查询。 我觉得我的回答可以帮到你,看第二部分 【参考方案1】:看看这样的事情是否有帮助
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();
【讨论】:
以上是关于Laravel Query Builder 在“whereIn”语句的子查询中使用父查询?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel:在“query-builder”或“eloquent”中更改原始查询
在 laravel 5.3 中调用未定义的方法 Illuminate\Database\Query\Builder::attach()
Laravel 查询错误 - 调用未定义的方法 Illuminate\Database\Query\Builder::query()
Laravel:调用未定义的方法 Illuminate\\Database\\Query\\Builder
laravel 5.2 调用未定义的方法 Illuminate\Database\Query\Builder::associate()