Я хочу разбить свой запрос на выбор в Laravel - PullRequest
0 голосов
/ 07 июля 2019

У меня проблема с запросом, когда я использую нумерацию страниц с помощью select в Laravel. Тем не менее, я нашел некоторый код Laravel Eloquent, но проблема в том, что он также не работает. Кто-нибудь может мне помочь с этой проблемой?

public function categoryall($urlid)
{
    // Old query
    // $procat = DB::select('select * from products where category_id in 
    // (select id from categories where parent_id = ?)', [$urlid]);

    $procat = Product::whereIn('category_id', function ($query) {
        $query->select('id')
            ->from(with(new Category)->getTable())
            ->where('parent_id', [$urlid]);
    })->paginate(5);

    return view('products.category')->with(compact('procat'));
}

Ответы [ 2 ]

3 голосов
/ 08 июля 2019

Вам нужно сделать так: function ($query) use ($urlid) и where('urlid',$urlid) Если хотите, whereIn, поставить его как массив

.
1 голос
/ 08 июля 2019

Поскольку отношение категорий и таблицы продуктов - ManyMany, поэтому создайте сводную таблицу category_product, например:

    Schema::create('category_product', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->timestamps();
        $table->bigInteger('category_id')->unsigned();
        $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
        $table->bigInteger('product_id')->unsigned();
        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
    });

Затем установите некоторые отношения и данные в 3 таблицах и используйте функцию ниже для разбивки на страницы:

public function categoryall($urlid)
{
    $category_ids = Category::where('parent_id',$urlid)->pluck('id'); // = [1,2]
    $products = Product::whereHas('categories', function($query) use ($category_ids) {
        $query->whereIn('category_id', $category_ids);
    })->paginate(5);
    return $products;
}

И спроси меня, если нужно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...