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.


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