查询时需要用laravel获取数据

Need to get data with laravel when query

我正在尝试使用 when query in Laravel 来过滤数据,它应该使用过滤器 $sortBy 或 $categoryId 来过滤数据。请注意 $id $sortBy $categoryId 等所有 3 个字段都是可选的,不会在所有查询中显示

public function Products(Request $request)
{
    $page     = $request->has('page') ? $request->get('page') : 1;
    $limit    = $request->has('itemsPerPage') ? $request->get('itemsPerPage') : 10;
    $sortBy = (($request->sortBy == "popularity")  ? "viewCount" : "created_at");
    $categoryId=  $request->get('categoryId');

    $sellerId = $request->header('id')?SellersBranding::findOrFail($request->header('id')):"Null";
    
    $productLive = ProductsLive::select('productTitle', 'product_id', 'brand_id', 'category_id')
        ->when($sellerId=="Null", function($query)  use ($page, $limit){
            return $query->where('status', 'active')
            ->limit($limit)->offset(($page - 1) * $limit);
        })
        ->when($sortBy, function ($query) use ($sortBy, $sellerId, $page, $limit){
            return $query->orderBy($sortBy, 'DESC')
                ->where('Sid', $sellerId->id)
                ->where('status','active')
                ->limit($limit)->offset(($page - 1) * $limit);
        })
        ->when($categoryId, function ($query) use ($categoryId, $sellerId, $page, $limit) {
            ->where('Sid', $sellerId->id)
                ->where(['category_id' => $categoryId, 'status' => 'active'])
                ->limit($limit)->offset(($page - 1) * $limit)
                ->inRandomOrder();
        })->get();
}

我是 php 的新人,也是 laravel 的新人,请帮助如何获取过滤数据

我清理了你的代码你可以检查这个

public function Products(Request $request)
{
    $page     = $request->has('page') ? $request->get('page') : 1;
    $limit    = $request->has('itemsPerPage') ? $request->get('itemsPerPage') : 10;
    $sortBy = (($request->sortBy == "popularity")  ? "viewCount" : "created_at");
    $categoryId=  $request->filled('categoryId');

    $seller = $request->header('id') ? SellersBranding::findOrFail($request->header('id')): null;

    $productLive = ProductsLive::select('productTitle', 'product_id', 'brand_id', 'category_id')

        ->when($seller ,function ($query) use ($seller){
            $query->where('Sid', $seller->id);
        })

        ->when($categoryId ,function ($query)){
            $query->where('category_id', request('categoryId'))
            ->inRandomOrder();
        })

        ->where('status','active')
        ->orderBy($sortBy, 'DESC')
        ->limit($limit)->offset(($page - 1) * $limit);

    return $productLive;

}

这里 when() 一些过滤器即将到来我们只应用条件。

没有像您那样返回每个过滤器