Laravel выборка из базы

Столкнулся с проблемой выборки из связанной таблицы. Есть таблица product где храню информацию по товару - название, описание, цена и тп. В связанной таблице product_option храню характеристики по товару - артикул, цвет, размер и тп.

Написал запрос:

$products = Product::query()
            ->with('option')
            ->when(request('s'), function (Builder $query) {
                $query->whereFullText(['title', 'description'], request('s'));
            })
            ->paginate(11);

в модели Product сделал отношение многие ко многим

public function option()
{
   return $this->belongsToMany(ProductOption::class);
}

Миграция:

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('description')->nullable();
    $table->string('slug')->unique();

    $table->string('thumbnail')->nullable();

    $table->timestamps();
});


Schema::create('product_options', function (Blueprint $table) {
    $table->id();

    $table->foreignIdFor(Product::class)
        ->constrained()
        ->cascadeOnUpdate()
        ->cascadeOnDelete();

    $table->foreignIdFor(ProductSize::class)
        ->constrained()
        ->cascadeOnUpdate()
        ->cascadeOnDelete();

    $table->foreignIdFor(ProductColor::class)
        ->constrained()
        ->cascadeOnUpdate()
        ->cascadeOnDelete();
});

В результате выдает ошибку: SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "product_product_option" does not exist LINE 1: ...ct_option_id" from "product_options" inner join "product_p... ^

Чистый sql получился такой:

SELECT
  "product_options".*,
  "product_product_option"."product_id" AS "pivot_product_id",
  "product_product_option"."product_option_id" AS "pivot_product_option_id"
FROM
  "product_option"
  INNER JOIN "product_product_option" ON "product_options"."id" = "product_product_option"."product_option_id"
WHERE
  "product_product_option"."product_id" IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)

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


Ответы (1 шт):

Автор решения: noobaster

У вас не верно выбрано отношение, судя по миграции, вам необходимо использовать belongsTo, а не belongsToMany. Отношение belongsToMany предполагает наличие pivot-таблицы.

Обратитесь к документации

→ Ссылка