我开发了注册模块,我想用电子邮件,nationalCode或mobile检查在我的Web应用程序中注册的用户,我有两个表,users和userInfo,我将电子邮件存储在users表中,并且将nationalCode和mobile存储在userInfo表中,我想编写代码以检测我的两个表中是否存在该用户的电子邮件或NationalCode或手机,我显示用户已在我的站点中注册的警告文本,请帮助我完成这项工作,
我使用步骤表单,并编写ajax来调用方法来完成此任务, 请注意,用户可能有三个匹配项,或者只有其中之一被匹配 谢谢您的帮助:)
这是ajax代码:
$.ajax({
url: url',
type: 'POST',
data: {
_token: CSRF_TOKEN ,
code:code,
email:email,
mobile:mobile,
},
dataType: 'JSON',
success:function(data) {
//return data
}
});
这是我的方法是控制器
public function checkUser(Request $request)
{
$email = $request->email;
$mobile = $request->mobile;
$code = $request->code;
//here the query to detect user exist with three params
}
答案 0 :(得分:0)
假设您的关系定义如下:
class User extends Model
{
public function info()
{
return $this->hasOne(UserInfo::class);
}
}
class UserInfo extends Model
{
public function user()
{
return $this->belongsTo(User::class);
}
}
...然后,您可以使用类似的方法检查该用户的存在。
$user = User::where('email', $request->email)
->whereHas('info', function($query) use($request) {
$query->where('mobile', $request->mobile)
->where('code', $request->code);
})
->exists();
// user will be false if there's no record matching those parameters
或者,如果您没有定义关系,则可能需要执行类似的操作。
$user = User::where('email', $request->email)->exists();
$info = UserInfo::where([
'mobile' => $request->mobile,
'code' => $request->code
])->exists();
if($user && $info) {
// user exists
}
我还是更愿意选择选项一:)
答案 1 :(得分:0)
如果在表中放入唯一标识符,数据库将自动检测到该标识符并返回错误,但是让数据库来处理它不是一个好习惯,
如果您想使用Eloquent,则查询看起来像这样
public function checkUser(Request $request)
{
$email = $request->email;
$mobile = $request->mobile;
$code = $request->code;
$user = User::query()->where('email', '=', $email)->orWhere('mobile','=',$mobile)
->orWhere('code', '=',$code)->get();
if($user) {
// User already exits
return;
}
}
但是这种验证对我来说不是很好,更好的是使用Laravel Requests https://laravel.com/docs/5.7/validation#form-request-validation
要生成自定义请求,请使用以下命令(php artisan make:request RequestName)
public function rules()
{
return [
'title' => 'required|unique:users',
'mobile' => 'required|unique:users',
'code' => 'required|unique:users',
];
}
使用请求很简单
public function checkUser(YourCustomRequest $request)
{
// Laravel will take care of all fields and check them if they exist in the database
}