Как противостоять дубликатам в записи - PullRequest
0 голосов
/ 25 апреля 2018

Здесь я столкнулся с проблемой повторяющихся записей в моей базе данных. Я установил уникальный идентификатор пациента в своем контроллере и хочу добавить пользователей, имеющих тот же адрес электронной почты, но уникальный номер телефона.

Что я сделал и попробовал в своей функции контроллера:

public function store(Request $request) {    
    $validator = \Validator::make($request->all(), [
        'name' => 'required',
        'email' => 'required|email',
        'phone'=>'required|min:11|numeric|unique:patients',
        'birth_date' => 'required',
        'gender' => 'required',
        'address' => 'required',
    ]);

    if ($validator->fails()) {
        $errors = $validator->errors();
        return $errors->toJson();
    } else {
        $fileNameToStore = 'defaultimg/avatar.png';
        $post = new patient;
        $post->name = $request->input('name');
        $post->email = $request->input('email');
        $post->picture = $fileNameToStore;
        $post->birth_date = $request->input('birth_date');
        $post->gender = $request->input('gender');
        $address = htmlspecialchars($request->input('address'));
        $post->address = $address;
        $post->patient_id = 'PID' . rand(999, 9999999999999);
        $post->phone = $request->input('phone');
        $post->save();

        return response(array(
            'error' => false,
            'message' => 'Patient added successfully', 'patientid' => $post->patient_id,), 200);
    }
}

Все работает нормально согласно моему требованию, но код выдает следующее исключение:

QueryException SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись 'front@gmail.com' для ключа 'Patient_email_unique'

Вот моя миграция для таблицы patients:

Schema::create('patients', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('birth_date');
    $table->string('gender');
    $table->string('address');
    $table->string('patient_id');
    $table->string('picture');
    $table->string('phone')->unique();
    $table->rememberToken();
    $table->timestamps();
});

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Для проверки уникальности в определенной таблице вы можете использовать проверку правильности laravel.

$validator = \Validator::make($request->all(), [
    'name' => 'required',
    'email' => 'required|email|unique:patients,email',
    'phone'=>'required|min:11|numeric|unique:patients',
    'birth_date' => 'required',
    'gender' => 'required',
    'address' => 'required',
]);
0 голосов
/ 25 апреля 2018

Изменить эту строку

$table->string('email')->unique();

На

$table->string('email');
0 голосов
/ 25 апреля 2018
$this->validate($request,[
 'email' => 'required|email|unique',
]);

в вашей миграции

$table->string('email')->unique();
0 голосов
/ 25 апреля 2018

Вы должны добавить правило проверки unique в поле email следующим образом:

$validator = \Validator::make($request->all(), [
    'name' => 'required',
    'email' => 'required|email|unique',
    'phone'=>'required|min:11|numeric|unique:patients',
    'birth_date' => 'required',
    'gender' => 'required',
    'address' => 'required',
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...