Лучшая практика Laravel для уникальных полей на основе переменной - PullRequest
0 голосов
/ 13 ноября 2018

Мне очень трудно определить этот заголовок. По сути, моей таблице patients нужен столбец уникальных идентификаторов, и мы достигаем этого путем объединения имени и фамилии пациента и даты рождения. Я хотел бы найти способ проверить это в базе данных, прежде чем пытаться вставить ее и отобразить сообщение об ошибке. Вот что у меня сейчас есть:

$this->validate($request, [
    'doctor' => 'required|integer',
    'last_name' => 'required|string|max:255',
    'first_name' => 'required|string|max:255',
    'dob' => 'required|date_format:"m/d/Y"|max:255',
]);

$dobFix = date('Y-m-d', strtotime($request->dob));
$unique_id = $request->first_name . $request->last_name . $dobFix;

$patient = new Patient();
$patient->last_name = $request->last_name;
$patient->first_name = $request->first_name;
$patient->dob = $dobFix;
$patient->unique_id = $unique_id;
$patient->save();

$message = 'Patient ' . $request->first_name . ' ' . $request->last_name . ' was successfully added.';

return redirect()
    ->route('patients.index')
    ->with('success', $message);

Когда я пытаюсь отправить дубликат записи с этим, я получаю следующую страницу ошибки laravel:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 
'DuaneBartelli1986-06-22' for key 'patients_unique_id_unique' (SQL: 
insert into `patients` (`last_name`, `first_name`, `dob`, `unique_id`, 
`updated_at`, `created_at`) values (Bartelli, Duane, 1986-06-22, 
DuaneBartelli1986-06-22, 2018-11-13 13:16:37, 2018-11-13 13:16:37))

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

1 Ответ

0 голосов
/ 13 ноября 2018

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

Оберните ваш $patient->save(); в try-catch, который возвращает пользователя на страницу с лучшим сообщением об ошибке.

try {
    $patient->save();
} catch (\Exception $e) {
    return redirect('/yourUrl')->with('error', 'Your error message');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...