Laravel条件条款何时()

时间:2017-06-09 06:39:53

标签: 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" 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'有关。请指教。感谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

$rolefalse时,关闭不会执行,因此您只需获取此查询:

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