SQLSTATE [23000]: нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку (Laravel 6) - PullRequest
1 голос
/ 23 сентября 2019

Что я делаю не так?

Среда: Laravel 6, Усадьба (локальная), Windows 10

Создать внешнюю таблицу (миграция):

Schema::create('external', function (Blueprint $table) {
                $table->increments('id')->unsigned();
                $table->foreign('id')->references('order_id')->on('order');
            });

СоздатьТаблица заказов (миграция):

Schema::create('order', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('order_id')->index();

External.php (модель):

class External extends Model
    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}

Order.php (модель):

public function external()
{
    return $this->belongsTo(External::class);
}

Сообщение об ошибке:

SQLSTATE [23000]: нарушение ограничения целостности: 1452 Не удается добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (homestead. external, CONSTRAINT external_id_foreign FOREIGN KEY (id) ССЫЛКИ order (order_id)) (SQL: вставить в external (site_order_id, order_status, ...

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Отредактировано (миграция внешней таблицы):

$table->unsignedBigInteger('id')->nullable();
$table->foreign('id')->references('order_id')->on('order');

Отредактировано (миграция таблицы заказов):

$table->increments('id');
$table->unsignedBigInteger('order_id')->index()->unsigned();
0 голосов
/ 23 сентября 2019

Ошибка является распространенной и легко объяснимой.Ваш код Laravel генерирует одну (или более) вставку, которая ссылается на запись в таблице order, которая не существует.Попробуйте выполнить следующий запрос:

SELECT o.*
FROM [order] o
WHERE order_id = <external.id value here>

Если вы получите пустой набор результатов, это означает, что ваша вставка ссылается на данные в order, которых не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...