如何在Laravel 5.4中使用一对多关系的条件

时间:2018-08-28 09:17:17

标签: php laravel laravel-5.4

我遵循这个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();

打印屏幕: enter image description here

我不知道为什么 $ ot_start $ ot_end 出错。

3 个答案:

答案 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) {

现在,这些变量在函数中可用。