繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM