php when,关于php:Laravel条件子句When()

我是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 :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值