Laravel 8 关系搜索返回空结果

Laravel 8 relationship search returning empty result

我有这个查询:

 $orders = Order::with(['company', 'products', 'user', 'status', 'seller'])->orderBy('id', 'DESC')->select('orders.*'); 

它returns yajra 数据表实例中预期的相关结果。

现在我想进一步缩小这个结果。我是这样使用的:

 $orders = $orders->whereHas('user', function ($q) use ($request){                
                 $q->searchFullName($request->seller);
             });

我在模型中创建了一个范围,它适用于我网站上的另一个功能。然而,它 returns 这样调用时没有结果。

即使我使用 where 语句调用 whereHas,结果仍然是空的:

 $orders = $orders->whereHas('user', function ($q) use ($request){                
                 $q->where('first_name', 'like', '%'.$request->seller.'%');
             });

卖家参数不为空。即使我使用硬编码字符串,结果也总是空的。

searchFullName 方法:

public  function scopesearchFullName($query, $value){
        return $query->where('first_name', 'LIKE', "%$value%")
                     ->orWhere('middle_name', 'LIKE', "%$value%")
                     ->orWhere('last_name', 'LIKE', "%$value%");
    }

完全控制者:

public function listOrdersData(Request $request)
    {
        if(!$request->ajax())
            return Redirect::route('/');
   
        $loggedUser = Auth::user();
    
        if($loggedUser->hasRole('Super Administratör'))
            $orders = Order::with(['company', 'products', 'user', 'status', 'seller'])->orderBy('orders.id', 'DESC')->select('orders.*'); 
        else
            $orders = Order::with(['company', 'products', 'user', 'status', 'seller'])->where('company_id', $loggedUser->company_id)->orderBy('id', 'DESC')->select('orders.*'); 
         
        if (!empty($request->seller) && $request->seller != 'all') {       
     
            $orders = $orders->whereHas('user', function ($q) use ($request){
              
                 $q->searchFullName($request->seller);
             });
        }
     
        return DataTables::of($orders) 
            ->addColumn('products', function($orders) {
                $products = "";
                foreach($orders->products as $product)               
                   $products = $products . $product->name . "<br>"; 
                
                return $products;
            })
            ->editColumn('company', function($orders){ return $orders->company->name; })            
            ->editColumn('price', '{{$price}} kr')   
            ->editColumn('user', function($orders){
                return $orders->user->full_name;
            }) 
            ->addColumn('seller', function($orders){
                return $orders->seller->full_name;
            })   
            ->addColumn('status', function($orders){
                return '<span class="chip lighten-4 purple purple-text">'. $orders->status->localized . '</span>';
            }) 
            ->addColumn('contract', '<a href="/download/{{$scrive_id}}"><i class="material-icons">file_download</i></a>')   
            ->addColumn('edit', '<a href="/editOrder/{{$id}}"><i class="material-icons">edit</i></a>')        
            ->rawColumns(['products', 'status', 'edit', 'contract'])          
      

  ->make(true);
}

范围方法有问题

public function scopesearchFullName($query, $value){
    return $query->where('first_name', 'LIKE', "%".$value."%")
                 ->orWhere('middle_name', 'LIKE', "%".$value."%")
                 ->orWhere('last_name', 'LIKE', "%".$value."%");
}

还要确保只有 returns 有订单的用户记录。

也用于搜索卖家订单

$orders = $orders->whereHas('seller', function ($q) use ($request){
          
             $q->searchFullName($request->seller);
         });

所以在订单模型中

public function seller()
{
  return $this->belongsTo(User::class, 'seller_id', 'id');
}