Невозможно создать внешний ключ в Laravel с Mysql - PullRequest
0 голосов
/ 20 мая 2018

У меня есть проект, и я сначала вызываю эти 2 команды в моей командной строке:

php artisan make:model Music -m
php artisan make:model Artist -m

Затем я создаю внешний ключ в файле переноса музыки, например:

public function up()
{
    Schema::create('musics', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('artist_id')->unsigned();
        $table->timestamps();
        $table->foreign('artist_id')->references('id')->on('artists');
    });
}

Теперь, когда я запускаю команду migrate, как:

php artisan migrate

Но у меня есть эта ошибка:

       Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `musics` add constraint `musics_artist_id_foreign` foreign key (`artist_id`) references `artists` (`id`) on delete cascade)

  at D:\sites\laravel\MrMusic\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint")
      D:\sites\laravel\MrMusic\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  2   PDOStatement::execute()
      D:\sites\laravel\MrMusic\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

  Please use the argument -v to see more details.

Примечание: я протестирую несколько способовкак установить индекс для обоих полей, ...

Ответы [ 4 ]

0 голосов
/ 31 мая 2018

У меня нет ошибок в файле создания миграций.

Моя ошибка в функция создания для реализации в модели Artist :

В моем Artist.php я использовал:

public function music(){ ... }

Теперь я забыл установить так:

public function musics(){ ... }
0 голосов
/ 20 мая 2018

Убедитесь, что миграция таблицы artists выполняется до миграции musics.Вы не можете создать внешний ключ ни для чего!

Кроме того, убедитесь, что столбец в обеих таблицах идентичен, другими словами, в этом случае и столбец внешнего ключа, и исходный первичный ключ должны быть целыми числами без знака.

Наконец, лучше указывать методы onUpdate () и onDelete () при определении вашего ограничения внешнего ключа, это облегчает отладку / чтение позже.

В вашем случае вы бы сделали:

$table->foreign('artist_id')->references('id')->on('artists')->onUpdate('cascade')->onDelete('cascade');
0 голосов
/ 21 мая 2018

Сначала вы должны иметь таблицу художников , а затем иностранный идентификатор исполнителя.Сначала попробуйте создать модель художника.

0 голосов
/ 20 мая 2018

Проблема заказа.Сначала вы должны создать таблицу artists.musics.artist_id не может ссылаться на ключ, который еще не существует:

php artisan make:model Artist -m
php artisan make:model Music -m
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...