Laravel 5.5 Check User存在两个表中的三个参数

时间:2019-02-08 17:27:57

标签: php laravel laravel-5 registration

我开发了注册模块,我想用电子邮件,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
}

2 个答案:

答案 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
}