如何在Laravel SQL原始查询中使用括号

3

我希望构建一个查询,用户需要正确的用户名电子邮件密码才能登录。

这是我的Laravel查询代码:

$query = Adminuser::where('password',$password);
$query->orWhere('email',$username);        
$query->where('username',$username);

通过使用这个,我得到了原始的SQL查询语句,如下所示:
select * from `adminuser` where `password` = $password and `email` = $username or `username` = $username

但我需要原始的SQL查询语句,以获得正确的结果。
select * from `adminuser` where `password` = $password and (`email` = $username or `username` = $username)

我的问题是如何在laravel查询中使用括号?

有人能帮忙吗?

2个回答

3

您需要使用分组。请阅读更多信息:参数分组Laravel 4.2)。

您的查询应该像这样(未经测试):

编辑:

Model::where(function ($query) use ($password) {
    $query->where('password',$password);
})->where(function ($query) use (email, $password){
    $query->where('email',$email)
          ->orWhere('username',$username);
});

1
你可以在此基础上添加密码部分,但查询是正确的。 - Dhaval Chheda
@DhavalChheda 感谢您指出这个打字错误。我已经编辑了我的回答。谢谢。 - Aefits
1
@Arafat 我看到你需要在查询中使用参数分组才能实现你的目标。你需要尝试不同的方法来解决其他问题,比如你所看到的问题。 - Aefits
每当在查询函数中使用变量时,它们被称为“未定义的变量”。 - Arafat
1
@ elegant-user....终于成功了!你更新的代码只需要稍微改动一下。我已经修改好了...非常感谢兄弟 :) - Arafat
显示剩余4条评论

1
$query = Adminuser::where('password',$password)->where(function($query) use ($username){
$query->orWhere(['email' => $username, 'username' => $username])
})->first();

每当一个变量在查询函数中被使用时,它们会称之为“未定义的变量”。 使用您的查询,我得到了“未定义的变量:密码”。 - Arafat
@pravin dabhi,使用($username)在你的回答中加1个赞。谢谢。 - Aefits

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接