Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用条件构造Laravel查询_Mysql_Laravel_Eloquent - Fatal编程技术网

Mysql 使用条件构造Laravel查询

Mysql 使用条件构造Laravel查询,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我正在尝试根据从POST请求发送的数据创建查询。我希望表单中的两个值都可以设置,但我希望其中一个值是可选的 在我的控制器中,如果我打那个电话 $year = request()->year; if(request()->filled('month')){ $month = sprintf("%02d",request()->month); } 这适用于正确设置$year和$month,但我在查询中遇到了一些问题。我的查询是这样的: $matches

我正在尝试根据从
POST
请求发送的数据创建查询。我希望表单中的两个值都可以设置,但我希望其中一个值是可选的

在我的控制器中,如果我打那个电话

$year = request()->year;
if(request()->filled('month')){
    $month = sprintf("%02d",request()->month);
}
这适用于正确设置
$year
$month
,但我在查询中遇到了一些问题。我的查询是这样的:

$matches = DB::table('games')
    ->join('clubs', 'games.opposition','=','clubs.id')
    ->join('stadiums', 'games.stadium','=','stadiums.id')
    ->select('date','clubs.name AS opposition','games.home/away','stadiums.name')
    ->whereYear('date',$year)
    ->whereMonth('date',$month)
    ->get();
我希望只有在表单中设置了月份值时才添加
->whereMonth
语句,因此我尝试用

->when(request()->filled('month'),function ($q) use ($month) {
                return $q->whereMonth('date',$month);
            })
但是它给了我一个
未定义的变量:month
错误


有人有什么建议吗?我试图将
request()->filled('month)
替换为
$month
,但它给了我同样的错误。

这是因为如果不存在月,则不设置月,但它应该在条件相同的情况下工作。将其简化,在一个语句中完成所有操作,而不是预先设置它,这难道没有帮助吗。那么您就没有实例化属性的问题了

->when(request()->filled('month'), function ($q) {
    return $q->whereMonth('date', sprintf("%02d",request()->month));
})

这是因为如果不存在月,则不设置月,但在条件相同的情况下,它应该可以工作。将其简化,在一个语句中完成所有操作,而不是预先设置它,这难道没有帮助吗。那么您就没有实例化属性的问题了

->when(request()->filled('month'), function ($q) {
    return $q->whereMonth('date', sprintf("%02d",request()->month));
})

谢谢,看来已经修好了,我的语法不正确。一旦我得到了一个有效的解决方案,我就打算内联它,只是想弄清楚我到底想做什么。很高兴它帮了我的忙。你的代码是正确的,认为可能是修订之间的错误或其他什么,只是没有必要只在出现时设置它,而你只能在条件下执行:)谢谢,看起来已经修复了它,我的语法是关闭的。一旦我得到了一个有效的解决方案,我就打算内联它,只是想弄清楚我到底想做什么。很高兴它帮了我的忙。您的代码是正确的,认为可能是修订之间的错误或其他问题,只是没有必要仅在出现时设置它,而您只能在以下条件下执行:)