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 шт):
У вас не верно выбрано отношение, судя по миграции, вам необходимо использовать belongsTo, а не belongsToMany. Отношение belongsToMany предполагает наличие pivot-таблицы.
Обратитесь к документации