Есть стандартная таблица пользователей из Laravel Auth, есть таблица с guidами для этих пользователей:
Создаю отношение в User.php:
public function guid()
{
return $this->hasOne(Guid::class);
}
В контроллере GuidController в методе store создаю запись через это отношение для текущего пользователя:
public function store()
{
$data = request()->validate([
'uid' => 'required',
]);
$guid = request()->user()->guid()->create($data);
}
При этом в миграции таблицы Guid установил уникальность поля user_id (мне нужно, чтобы на одного пользователя был один гуид всегда):
Schema::create('guids', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id')->unique();
$table->string('uid');
$table->timestamps();
});
При этом, если я два раза вызову метод store(), то мне выдаст ошибку на уровне базы данных:
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 19 UNIQUE constraint failed: guids.user_id (SQL: insert into "guids" ("uid", "user_id", "updated_at", "created_at") values (52973-276-9929276-03525, 1, 2020-09-29 09:43:25, 2020-09-29 09:43:25))
Вопрос - как правильно валидировать этот user_id, с учетом того, что я его не передаю в запросе, он берестя "сам" из отношения hasOne и соответстующей функции user()->guid()