За последние 24 часа нас посетили 17895 программистов и 1566 роботов. Сейчас ищут 1258 программистов ...

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row

Тема в разделе "Laravel", создана пользователем Сереганек, 28 окт 2017.

  1. Сереганек

    Сереганек Активный пользователь

    С нами с:
    18 янв 2017
    Сообщения:
    333
    Симпатии:
    27
    Есть три таблицы, две из них с внешними ключами:
    Таблица comments
    PHP:
    1. Schema::create('comments', function (Blueprint $table) {
    2.             $table->increments('id');
    3.             $table->integer('client_id')->unsigned()->default('0');
    4.             $table->foreign('client_id')->references('id')->on('clients')->onUpdate('cascade')->onDelete('cascade');
    5.             $table->text('message');
    6.             $table->timestamps();
    7.         });
    Таблица clients
    Код (Text):
    1. Schema::create('clients', function (Blueprint $table) {
    2.             $table->increments('id');
    3.             $table->text('email');
    4.             $table->text('name');
    5.             $table->text('position')->nullable();
    6.             $table->integer('location_id')->unsigned();
    7.             $table->foreign('location_id')->references('id')->on('locations')->onUpdate('cascade')->onDelete('cascade');
    8.             $table->timestamps();
    9.         });
    Таблица locations
    Код (Text):
    1.         Schema::create('locations', function (Blueprint $table) {
    2.             $table->increments('id');
    3.             $table->text('ip');
    4.             $table->text('country')->nullable();
    5.             $table->text('department');
    6.             $table->text('timezone');
    7.             $table->timestamps();
    8.         });
    Фрагмент из контроллера
    PHP:
    1.         $comment = new Comment();
    2.         $comment -> client() -> email = $request -> input('email');
    3.         $comment -> client() -> name = $request -> input('name');
    4.         $comment -> client() -> position = $request -> input('position');
    5.         $comment -> message = $request -> input('message');
    6.         $comment -> save();
    При попытке добавить запись в эти таблицы получаю ошибку.
    Текст ошибки
    Illuminate \ Database \QueryException (23000)
    SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`landing`.`comments`, CONSTRAINT `comments_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `comments` (`message`, `updated_at`, `created_at`) values (dfgdgdgdf, 2017-10-28 10:31:06, 2017-10-28 10:31:06))
    Читал инфу по коду этой ошибки. Советуют проверить соответствие названий и типов внешних ключей. Ключи перепроверил, не смог найти косяк. Либо чего-то еще не знаю, либо чего-то не заметил. Подскажите если кто заметит косяк.
    И еще один вопрос: я правильно понимаю, что при добавлении записи в таблицу clients (см. фрагмент из контроллера), автоматически заполнится соответствующая запись в таблице comments (колонка client_id)? Я полагаю это должен обеспечить метод onUpdate('cascade').
     
    #1 Сереганек, 28 окт 2017
    Последнее редактирование: 28 окт 2017