为了账号安全,请及时绑定邮箱和手机立即绑定

在 Laravel 查询构建器中结合 when() 和 whereBetween() 方法

在 Laravel 查询构建器中结合 when() 和 whereBetween() 方法

PHP
慕妹3242003 2021-12-24 09:29:05
我在 Larevel 中有一个模型,它采用参数来报告数据库中的总单位。我希望能够过滤返回的基础上,各单位$entity_ids和$start与$end用户选择的日期。entity_ids使用简单的whereIn()方法调用工作正常,但日期导致了一些问题。我在Order.php模型中的代码如下:public static function getAllOrdersForReporting($entity_ids, $start, $end) {    $orders = Order::select('all order information entered here')    ->whereIn('orders.entity_id', $entity_ids)    ->when($start && $end, function ($query, $start, $end) { //<-- Error Thrown Here        return $query->whereBetween('order_date', [$start, $end]);    })    ->join('entities', 'entities.id', '=', 'ura_orders.entity_id')    ->join('entity_address_information', 'entity_address_information.entity_id', '=', 'ura_orders.entity_id')->distinct()->get();    return $orders;}在我的ReportingController.php我输入以下内容:public function displayUnits() {    $entities = request()->entities_ids;    $start = request()->start_date;    $end = request()->end_date;    $orders = Ura_order::getAllOrdersForReporting($entities, $start, $end);    return view('reporting.pages.units', compact('entities', 'start', 'end', 'orders'));}但是,当我运行它时,出现以下错误:函数 App\Models\Order::App\Models{closure}() 的参数太少,2 传入 C:\xampp\htdocs\mywebsite\vendor\laravel\framework\src\Illuminate\Database\Concerns\BuildsQueries.php在第 91 行,预期正好有 3 个不完全确定这个错误是什么意思,除了Model只看到 2 个传入的错误,它预期 3 个。我在代码中标记了上面抛出错误的行。关于如何让它发挥作用的任何建议?我知道 for 的第三个参数when()应该是一个回调函数,但不知道如何使它工作。
查看完整描述

2 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

您必须use在回调函数中使用变量:


->when($start && $end, function ($query) use ($start, $end) {

    return $query->whereBetween('order_date', [$start, $end]);

})


查看完整回答
反对 回复 2021-12-24
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

您可以尝试使用以下代码:


->when($start && $end, function ($query, $condition) use($start, $end) { 

        return $query->whereBetween('order_date', [$start, $end]);

    })

正如评论中已经指出的, a 的 tihrd 参数when()应该是 a function,使用该use()语句您可以在闭包中传递变量。


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 360 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号