У меня проблема с простой попыткой определить правильное имя для таблицы-посредника, используемой для многих-многих отношений в Laravel.
Я получил следующую ошибку при попытке получить доступ к eloquent отношения:
$ product-> category; Освещение / База данных / QueryException с сообщением «SQLSTATE [42S02]: базовая таблица или представление не найдены: 1146 Таблица« dolstore- laravel .category_product »не существует (SQL: выберите categories
. *, category_product
. product_id
как pivot_product_id
, category_product
. category_id
как pivot_category_id
из categories
внутреннее соединение category_product
в categories
. id
= category_product
. category_id
, где category_product
. product_id
= 1) '
Моя миграция записана следующим образом:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->timestamps();
});
Schema::create('product_category', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('product_id');
$table->unsignedBigInteger('category_id');
$table->timestamps();
$table->unique(['product_id', 'category_id']);
$table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});
}
Кажется, я указал неверное имя product_category
когда это должно было быть category_product
. Какое правило регулирует это? В другом примере, где я действительно преуспел после учебника по Laracasts, моя миграция была записана следующим образом:
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->timestamps();
});
//Pivot Table
// article_tag
Schema::create('article_tag', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('article_id');
$table->unsignedBigInteger('tag_id');
$table->timestamps();
$table->unique(['article_id', 'tag_id']);
$table->foreign('article_id')->references('id')->on('articles')->onDelete('cascade');
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
});
}
Поэтому, похоже, это не связано с порядком, в котором создаются таблицы, или с миграцией внутри которой определяется сводная таблица.
Спасибо, что помогли мне понять это.