Laravel как сделать выборку по промежуточной таблице?
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('preview_title');
$table->string('main_title');
$table->text('content');
$table->decimal('price');
$table->text('images');
$table->unsignedBigInteger('category_id');
$table->timestamps();
$table->foreign('category_id')->on('categories')->references('id')->onDelete('cascade');
});
Schema::create('tags', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->timestamps();
});
Schema::create('product_tags', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('product_id');
$table->unsignedBigInteger('tag_id');
$table->timestamps();
$table->foreign('product_id')->on('products')->references('id');
$table->foreign('tag_id')->on('tags')->references('id');
});
Задача такая: есть быстрый поиск по тэгу продукта, пользователь вводит тэг, в контроллере мы получаем title тэга и должны выдать продукты пользователю таким образом чтобы продукты с соответствующими тэгам были сверху, а которые не имеют тэги снизу.
Пробовал так:
$searchable = trim($request->quick_search);
$query->with('tags', function($q) use ($searchable) {
$q->where('title', 'LIKE', '%' . $searchable . '%')->orderBy('id', 'desc');
});
$products = $query->paginate(9);
Но ничего не работает.
В моделях мы имеем отношения BelongsToMany.