我是Laravel的新手,使用when()函数时遇到问题。 首先,我有一个包含3个输入字段的表单,这些输入字段分别是:名称,电子邮件和密码。
我在控制器文件中也有此代码。
$role = $request->input('role');
$first = User::when($role,function ($query) use ($role){
return $query->where('username',$role);
})->get();
根据Laravel文档,这应该不起作用,因为没有以我提交的形式命名为'role'的元素,并且$ role变量必须返回false。 但是,当我循环$ first变量时,它具有Users表中的所有记录。 所以我尝试纠正并放
$role = $request->input('name');
因此,当我在User表中放置一个名称时,它可以完美地工作。 但是,当我在(input type ='text'name ='name')元素中不输入任何内容并提交表单时。 它再次显示Users表中的所有记录。 我真的很困惑,我认为这与$ request-> input()返回的" false"或" empty"有关。 请指教。 谢谢。
当给该方法的第一个参数评估为true时,when方法将执行给定的回调。
谢谢您的回答Vishal Varshney :)
谢谢@RowelAbenio
如果设置了$role变量,则mysql查询将如下所示
select * from `users` where `role_id` = 1
如果未将$role设置为false,则mysql查询将如下所示
select * from `users`
您应该例如使用if编辑查询,并使用其他where()
现在,我了解了when()方法获取错误参数时会发生什么。 非常感谢UfguFugullu
没问题-我必须自己尝试才能理解这一点。 如果这样可以解决您的问题,请标记此答案。
当$role为false时,不执行闭包,因此您将简单地获得以下查询:
User::get();
该查询将仅返回所有用户。
在这种情况下,您需要使用简单的where():
User::where('username', $role)->first();
如果$role为空,它将返回一个User对象或null。
哦,谢谢你。 现在我懂了。 因此,如果第一个参数为false,则when()方法将不会执行,只会继续并使用get()。 我认为,如果when()方法获得错误的参数,则整个查询将无法正常工作。 我实际上正在探索使用此方法可以做什么。 非常感谢Alexey :)