我遵循这个link并很好地工作,但是当我尝试放置变量时,它给了我语法错误。
这是我的代码:
$ot_start = $request->ot_start;
$ot_end = $request->ot_end;
$ot_list = OTMain::with(['otmain_many_otline'=>function($query){
$query ->where('time_from', '>=', date('d/M/Y H:i:s', strtotime($ot_start . ' 00:00:00.000')))
->where('time_from', '<=', date('d/M/Y H:i:s', strtotime($ot_end .' 23:59:59.000')));
}])->get();
我不知道为什么 $ ot_start 和 $ ot_end 出错。
答案 0 :(得分:2)
添加use():
$ot_list = OTMain::with(['otmain_many_otline'=>function($query) use (ot_start , ot_end ){
$query ->where('time_from', '>=', date('d/M/Y H:i:s', strtotime($ot_start . ' 00:00:00.000')))
->where('time_from', '<=', date('d/M/Y H:i:s', strtotime($ot_end .' 23:59:59.000')));
}])->get();
答案 1 :(得分:2)
如果使用闭包(匿名函数),则需要通过use
传递变量。例如:
$ot_start = $request->ot_start;
$ot_end = $request->lot_end;
$ot_list = OTMain::with(['otmain_many_otline'=>function($query) use($ot_start,$ot_end){
$query ->where('time_from', '>=', date('d/M/Y H:i:s', strtotime($ot_start . ' 00:00:00.000')))
->where('time_from', '<=', date('d/M/Y H:i:s', strtotime($ot_end .' 23:59:59.000')));
}])->get();
答案 2 :(得分:2)
匿名功能function($query)
对$ot_start
,$ot_end
一无所知。这就是phpstorm标记这些变量的原因,因为它们在函数作用域中是未定义的。
您需要使用use
字词明确地传递密码:
OTMain::with(['otmain_many_otline'=>function($query) use ($ot_start, $ot_end) {
现在,这些变量在函数中可用。