方法Illuminate \ Support \ Collection :: orderBy不存在

时间:2018-12-27 06:25:49

标签: php laravel

我有一段这样的代码:

public function products()
{
    $product = DB::table('products')->where('is_active', NULL)->get();
    if($price = request('entityprice')){
        $product->orderBy('entityprice', $price);
    }
    // $products = DB::table('products')->where('is_active', NULL)->find($id);
    // dd($product);
    return view('products', compact('product'));
}

我遇到以下错误:

Method Illuminate\Support\Collection::orderBy does not exist.

我有首页

 <a href="?entityprice=desc">Sort by price descending</a>
 <a href="?entityprice=asc">Sort by price</a>

请帮助我)))

6 个答案:

答案 0 :(得分:1)

尝试这个

public function products()
{
    $product = DB::table('products')->where('is_active', NULL);
    if($price = request('entityprice')){
        $product->orderBy('entityprice', $price);
    }

    return view('products', ['product' => $product->get()]);
}

答案 1 :(得分:1)

实际上orderBy并未为Collection定义,您必须使用sortBy

更好的方法是对查询使用orderBy。是的,您有一个if语句。因此,用if方法代替when语句,它可以组织查询并使查询更好,更易读:

public function products()    
{
    $product = DB::table('products')
            ->where('is_active', NULL)
            ->when(request('entityprice', false), 
                function($query, $entityprice){
                    return $query->orderBy('entityprice', $entityprice);
                })
            ->get()
    return view('products', compact('product'));
}

答案 2 :(得分:0)

尝试此代码,

public function products()
{
    $product = DB::table('products')->where('is_active', NULL);
    if($price = request('entityprice')){
        $product->orderBy('entityprice', $price)->get();
    }
    // $products = DB::table('products')->where('is_active', NULL)->find($id);
    // dd($product);
    return view('products', compact('product'));
}

答案 3 :(得分:0)

您在代码中遇到逻辑错误

public function products()
{
 $product = DB::table('products')->where('is_active', NULL);
 if($price = request('entityprice')){
    $product->orderBy('entityprice', $price);
 }
 $prod = $product->get();
// $products = DB::table('products')->where('is_active', NULL)->find($id);
// dd($product);
return view('products', compact('prod'));
}

答案 4 :(得分:0)

您应该尝试以下操作:

public function products()
{
    $product = DB::table('products')->where('is_active', NULL)->get();
    if($price = request('entityprice')){
        $product->orderBy('entityprice', $price);
    }
$products = $products->get();
    // $products = DB::table('products')->where('is_active', NULL)->find($id);
    // dd($product);
    return view('products', compact('product'));
}

答案 5 :(得分:0)

您不能将orderBy与集合一起使用。您应在orderBy之前使用get()或对此集合使用sortBy。 修改它:

public function products()
{
    $product = DB::table('products')->where('is_active', NULL);
    if($price = request('entityprice')) {
        $product->orderBy('entityprice', $price);
    }

    return view('products', ['product' => $product->get()]);
}

public function products()
{
    $product = DB::table('products')->where('is_active', NULL)->get();
    if($price = request('entityprice')) {
        $product->sortBy('entityprice', $price);
    }

    return view('products', ['product' => $product->get()]);
}

第一个解决方案将在查询语句中排序。最后一个解决方案将在集合中排序。