【发布时间】:2021-09-12 01:13:13
【问题描述】:
我正在尝试根据用户过滤器从表中过滤掉一些特定记录,但遇到了如何正确格式化它的问题。我有来自Orders 表的sales_channel 和total 列。
如果sales_channel == Non-Amazon,那么我需要获取所有这些记录,而不管total。或者,如果sales_channel !== Non-Amazon 那么我只想抓取具有total > 0 的记录
对于我的初始查询,我有以下按预期工作:
$orders = Orders::where('sales_channel', '=', 'Non-Amazon')->orWhere(function ($query) {
$query->where('total', '>', 0);
})->get();
但是,当用户发送过滤数据的请求时,我不确定如何正确过滤请求。这是我目前拥有的$request['sales_channel'] 是他们想要返回的一系列销售渠道:
$request = $request->data;
$orders = Orders::query();
if ($request['sales_channel']) {
$orders->whereIn('sales_channel', $request['sales_channel']);
}
如果$request['sales_channel'] 包含Non-Amazon,我将如何做到这一点,获取所有非亚马逊记录,但对于任何其他销售渠道,total > 0 必须为真。
例子:
sales_channel | total
--------------+----------------
Non-Amazon | 19.99
Non-Amazon | 0.00
Amazon.com | 11.00
Amazon.com | 0.00
Amazon.ca | 22.00
Amazon.com.mx | 19.99
用户希望按非亚马逊和 Amazon.com 结果过滤:
$request['sales_channel'] = ['Non-Amazon', 'Amazon.com'];
结果将返回:
sales_channel | total
--------------+----------------
Non-Amazon | 19.99
Non-Amazon | 0.00
Amazon.com | 11.00
【问题讨论】:
-
您能否将示例数据作为结果的预期数据结束
-
@NurbekBoymurodov 通过示例更新了问题
标签: php laravel laravel-query-builder