Php Laravel条件子句When()

Php Laravel条件子句When(),php,laravel,Php,Laravel,我是Laravel的新手,在使用when()函数时遇到了一个问题。首先,我有一个由3个输入字段组成的表单,分别命名为:姓名、电子邮件和密码 <form method="post" action="/users"> <?php echo csrf_field(); ?> <input type="text" name="name" placeholder="Name"> <input type="email" name="email

我是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>
根据Laravel文档,这不应该工作,因为在我提交的表单中没有名为“role”的元素,$role变量必须返回false。但当我循环$first变量时,它在Users表中有所有记录。所以我试着纠正,把

$role = $request->input('name');

因此,当我在用户表中放置一个名称时,它可以完美地工作。但是当我在(input type='text'name='name')元素上键入任何内容并提交表单时。它再次显示用户表中的所有记录。我真的很困惑,我认为这与$request->input()返回的'false'或'empty'有关。请告知。谢谢。

当方法的第一个参数计算为true时,when方法将执行给定的回调。

$role
false
时,闭包不会执行,因此您只需得到以下查询:

User::get();
此查询将只返回所有用户

在这种情况下,您需要使用simple
where()

User::where('username', $role)->first();

如果
$role
为空,则返回用户对象或
null

如果设置了
$role
变量,则mysql查询将如下所示

select * from `users` where `role_id` = 1
select * from `users`
如果
$role
没有设置为
false
,那么mysql查询将如下所示

select * from `users` where `role_id` = 1
select * from `users`

例如,您应该使用
if
编辑查询,并使用不同的
where()

噢,谢谢。现在我明白了。因此,如果第一个参数为false,when()方法将不执行,而将继续并使用get()。我认为如果when()方法得到一个false参数,整个查询将无法工作。我实际上正在探索我能用这种方法做些什么。非常感谢Alexey:)现在我明白了当()方法获取假参数时会发生什么。非常感谢你的乌夫古卢诺问题-我必须亲自尝试才能理解这一点。如果这解决了你的问题,请在这个答案上做标记。谢谢你的回答Vishal Varshney:)谢谢@RowelAbenio