我有一段这样的代码:
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>
请帮助我)))
答案 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()]);
}
第一个解决方案将在查询语句中排序。最后一个解决方案将在集合中排序。