@dnevnick
junior full stack dev

Как сделать валидацию уникального поля при использовании отношения hasOne?

Есть стандартная таблица пользователей из 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()
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы