(errno: 150 «Ограничение внешнего ключа сформировано неправильно») в отношениях «многие ко многим» в Laravel - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь создать many-to-many эту ссылку с customer и shop в laravel, но застрял в этой ошибке (errno: 150 "Foreign key constraint is incorrectly formed") и до сих пор, не понять это.

Здесь мой customers таблица

Schema::create('customers', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->unsignedBigInteger('shop_id');
  $table->string('name');
  $table->string('email');
  $table->string('phone');
  $table->timestamps();

  $table->foreign('shop_id')->references('id')->on('shop');
});

Вот мой shops стол

Schema::create('shops', function (Blueprint $table) {
  $table->bigIncrements('id');
  $table->unsignedBigInteger('customer_id');
  $table->string('name');
  $table->timestamps();

  $table->foreign('customer_id')->references('id')->on('customer');
});  

Мой Shop Модель

protected $fillable = ['name'];

public function customer()
{
  return $this->belongsToMany(\App\Customer::class);
}

Мой Customer Модель

protected $fillable = ['name', 'email', 'phone'];

public function shop()
{
  return $this->belongsToMany(\App\Shop::class);
}

Любая помощь? Спасибо заранее ...

Ответы [ 3 ]

0 голосов
/ 13 октября 2019

Примечание для вас. Не используйте внешнюю команду в команде создания таблицы.
Убедитесь, что всегда добавлен новый файл миграции для добавления внешнего ключа во внутреннюю таблицу.
Причиной возникновения некоторых ошибок во время миграции .. откройте оболочку bash или PHP Storm Terminal или CMD

php artisan make:migration foreign_customer_id_at_table_shops --table=shops //you Can use your own migration name what you want

в файле миграции foreign_customer_id_at_table_shops

UP

$table->foreign('customer_id')->references('id')->on('customers');

ВНИЗ

$table->dropForeign(['customer_id']);
0 голосов
/ 13 октября 2019

Поместите внешний ключ в отношения, а не в миграцию.

 public function customer()
 {
  return $this->belongsToMany('\App\Customer::class','id','shop_id');
 }

 public function shop()
 {
   return $this->belongsToMany('\App\Shop::class','id','customer_id');
 }
0 голосов
/ 13 октября 2019

Проверьте свою схему - это должны быть магазины, а не магазины ...

$table->foreign('shop_id')->references('id')->on('shops');

и аналогичные клиенты, а не клиенты ...

$table->foreign('customer_id')->references('id')->on('customers');
...