我是Laravel的新手并且在使用when()函数时遇到了问题。为了开始这个,我有一个由3个输入字段组成的表单:名称,电子邮件和密码。
<form method="post" action="/users">
<?php echo csrf_field(); ?>
<input type="text" name="name" placeholder="Name">
<input type="email" name="email" placeholder="Email">
<input type="password" name="password" placeholder="Password">
<input type="submit" value="Create">
</form>
此外,我在控制器文件中也有此代码。
$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-&gt; input()返回的'false'或'empty'有关。请指教。感谢。
答案 0 :(得分:1)
当给予方法的第一个参数求值为true时,when方法将执行给定的回调。
答案 1 :(得分:0)
当$role
为false
时,关闭不会执行,因此您只需获取此查询:
User::get();
此查询将返回所有用户。
在这种情况下,您需要使用简单的where()
:
User::where('username', $role)->first();
如果null
为空,它将返回用户对象或$role
。
答案 2 :(得分:0)
如果设置了+------+----------+
| name | machine |
+------+----------+
| xxxx | Machine1 |
| yyyy | Machine2 |
| zzzz | Machine3 |
+------+----------+
变量,则mysql查询将如下所示
$role
如果select * from `users` where `role_id` = 1
未设置为$role
,那么mysql查询将如下所示
false
您应该使用select * from `users`
编辑查询,并使用不同的if