Как проверить, если пользователь уже создан, если нет, создать, иначе показать сообщение об ошибке, что пользователь создан Laravel - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть форма регистрации на моей главной странице, и цель состоит в том, чтобы проверить, если пользователь уже создан, если пользователь уже существует, показать сообщение об ошибке, что пользователь уже создан с заданными значениями.

Мой метод создания RegisterController теперь выглядит следующим образом:

public function create(Request $request) {

    $create = User::create([
        'email' => $request['email'],
        'paypal_email' => $request['paypal_email'],
        'password' => Hash::make($request['password']),
    ]);

    if($create){
        Company::create(['user_id' => $create->id]);
        return redirect('/dashboard');
    }
}

Как проверить, создан ли пользователь, и если да, показать сообщение об ошибке?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2020

В вашем контроллере:

$request->validate([
    'email' => 'required|unique:database_table,column'
])->messages([
    'email.unique' => 'User has already been registered.',
]);

Тогда, на ваш взгляд:

@if($errors->any())
    @foreach($errors->all() as $error)
        {{ $error }}
    @endforeach
@endif
1 голос
/ 27 февраля 2020

Я бы сделал гораздо больше до и после сохранения регистрационных данных в базе данных, но для проверки вы можете использовать Laravel проверка. Вот пример:

    public function create(Request $request) {


        $request->validate(    
           [
            'email' => 'required|string|email|max:255|unique:users',
            'paypal_email' => 'required|string|paypal_email|max:255|unique:users',
            'password' => 'required|string|min:6'
           ]
        );

        $create = User::create([
            'email' => $request['email'],
            'paypal_email' => $request['paypal_email'],
            'password' => Hash::make($request['password'])
        ]);

        if($create){
            Company::create(['user_id' => $create->id]);
            return redirect('/dashboard');
        }
    }

В представлении ошибки проверки могут быть представлены как

<!-- /resources/views/post/create.blade.php -->

<h1>Create Post</h1>

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<!-- Create Post Form -->

Ссылка: Laravel 5.8 проверка

1 голос
/ 27 февраля 2020

Вы можете использовать метод firstOrCreate.

Основывается на документации laravel.

Метод firstOrCreate попытается найти запись базы данных, используя заданные пары столбец / значение. Если модель не может быть найдена в базе данных, будет вставлена ​​запись с атрибутами из первого параметра, а также с атрибутами во втором необязательном параметре.

Первый параметр должен соответствовать значению пары

например: ['email' => $ request ['email']]

Второй параметр - это значение, которое будет вставлено в вашу базу данных

 $user = User::firstOrCreate(['email' => $request['email']]
 ,[
    'email' => $request['email'],
    'paypal_email' => $request['paypal_email'],
    'password' => Hash::make($request['password']),
]);

if ($user) {
 // records found
}

Прочитайте документацию здесь

...