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