【问题标题】:Laravel check if user existsLaravel 检查用户是否存在
【发布时间】:2017-07-13 23:50:48
【问题描述】:

我正在使用 Laravel 5.2.45

我正在尝试为我的应用程序创建新用户。 在创建用户之前,我需要检查是否有同名、同姓和生日的用户。 我怎么能在 laravel 中做到这一点?

【问题讨论】:

  • 通过执行数据库查询来查看这些值是否在您的数据库中。见query builder docs。您的问题非常基本,可能会被关闭,因为您没有代码表明您尝试过自己这样做。
  • laravel 提供了例如 'unique' 来检查数据库中是否已经存在某些数据。但我不是在寻找一个条目。 3 个条目必须匹配才能给出错误。我知道我可以进行数据库查询并检查是否已有用户,但我认为在 laravel 中有更好的方法

标签: laravel validation


【解决方案1】:

正如 Laravel 验证 Docs 所说

唯一:表、列、除外、idColumn

Validator::extend('and_unique', function($attribute, $value, $parameters, $validator) {
$result = DB::table($parameters[0])->where(function($query) use ($attribute, $value, $parameters) {
    $query->where($attribute, '=', $value) // where name = value
        ->orWhere($parameters[1]), '=', $value); // where surname = value
        ->orWhere($parameters[2]), '=', $value); // where birthday = value
})->first();

return $result ? false : true;
});

'name' => 'required|and_unique:users,surname,birthday'

【讨论】:

  • 这行不通。如果使用姓名、姓氏或生日中的一个,则会出现错误。
【解决方案2】:

具有相同姓名、姓氏和生日的用户

$duplicate_user = \DB::table('users')
    ->where('name', 'LIKE', $new_name)
    ->where('surname', 'LIKE', $new_surname)
    ->where('birthday', '=', $new_birthday)
    ->first();

if($duplicate_user) {
    return response('This user already exists', 422);
}

【讨论】:

    【解决方案3】:
    $siteUser = new SiteUser;
    
    foreach (['birth_date', 'first_name', 'last_name'] as $key) {
    $siteUser->$key = $request->$key;
    }
    

    【讨论】:

    • 你能在你的答案中添加一些细节吗?为什么 OP 应该使用这个代码?
    猜你喜欢
    • 2018-04-12
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2018-02-28
    相关资源
    最近更新 更多