我在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个。
我在上面的代码中标记了引发错误的行。
有关如何使其正常工作的任何建议?我知道when()
的第3个参数应该是一个回调函数,但不确定如何使它起作用。
答案 0 :(得分:2)
您必须在回调函数中使用use
个变量:
->when($start && $end, function ($query) use ($start, $end) {
return $query->whereBetween('order_date', [$start, $end]);
})
答案 1 :(得分:1)
您可以尝试使用以下代码:
->when($start && $end, function ($query, $condition) use($start, $end) {
return $query->whereBetween('order_date', [$start, $end]);
})
正如注释中已经指出的那样,when()
的tihrd参数应该是function
,使用use()
语句可以在闭包中传递变量。