Задать вопрос
@infirmitive

В чём ошибка объявления внешнего ключа?

Категорически приветствую!
Делаю в личном кабинете laravel страницу с инвентаризацией компьютеров в сети домена и при объявлении структуры таблиц и их отношений спотыкаюсь об ошибку внешних ключей. В чем может быть дело?
Скрипт, который собирает инфу об устройствах генерирует уникальный id для каждого компьютера и заносит инфу в базу. Соответственно, в таблицах с дисками, озу и адаптерами (ввиду их возможного множества) строки должны цепляться к основной по этому id.
public function up()
    {
        Schema::create('machines', function (Blueprint $table) {
            // Структура
            $table->bigIncrements('id');
            $table->string('name')->nullable();
            $table->string('username')->nullable();
            $table->string('domain')->nullable();
            $table->string('model')->nullable();
            $table->string('serial_number')->nullable();
            $table->string('os')->nullable();
            $table->string('cpu')->nullable();
            // Отношения
            $table->integer('machine_id')->unsigned()->index();
            $table->foreign('machine_id')->references('m_id')->on('diskdrives')->onDelete('cascade');
            //$table->foreign('machine_id')->references('m_id')->on('ram')->onDelete('cascade');
            //$table->foreign('machine_id')->references('m_id')->on('net_adapters')->onDelete('cascade');
            $table->timestamps();
        });
    }

public function up()
    {
        Schema::create('diskdrives', function (Blueprint $table) {
            // Структура
            $table->bigIncrements('id')->primary();
            $table->integer('m_id')->nullable()->unsigned()->index();
            $table->string('serial_number')->nullable();
            $table->string('type')->nullable();
            $table->string('model')->nullable();
            $table->float('capacity')->nullable();
        });
    }

General error: 1005 Can't create table `inventory`.`machines` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `machines` add constraint `machines_machine_id_foreign` foreign key (`machine_id`) references `diskdrives` (`m_id`) on delete cascade)

И ещё такой вопрос: можно ли из основного файла к полю machine_id по внешнему ключу привязать еще два? (которые закомментированы).
  • Вопрос задан
  • 152 просмотра
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
bitniks
@bitniks
Go/PHP/Symfony developer
Проверьте в каком порядке запускаете миграции. Возможно, пытаетесь сначала создать таблицу `machines`, когда еще нет таблицы `diskdrives`

можно ли из основного файла к полю machine_id по внешнему ключу привязать еще два?

Привязать можно
Ответ написан
Комментировать
@Xachik
Laravel & Vue Js Developer
Замени метод bigIncrements() на increments()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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