[英]How to use condition for one to many relationship in Laravel 5.4
我按照此链接操作 ,但效果很好,但是当我尝试放入变量时,它给了我语法错误。
这是我的代码:
$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出现错误。
添加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();
如果使用闭包(匿名函数),则需要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();
匿名函数function($query)
一无所知 $ot_start
, $ot_end
。 这就是phpstorm标记这些变量的原因,因为它们在函数作用域中未定义。
您需要use
单词显式地传递它们:
OTMain::with(['otmain_many_otline'=>function($query) use ($ot_start, $ot_end) {
现在,这些变量在功能中可用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.