【发布时间】:2021-09-19 18:10:44
【问题描述】:
我有这个问题:
$orders = Order::with(['company', 'products', 'user', 'status', 'seller'])->orderBy('id', 'DESC')->select('orders.*');
并在 yajra 数据表实例中返回预期的相关结果。
现在我想进一步缩小这个结果的范围。我是这样用的:
$orders = $orders->whereHas('user', function ($q) use ($request){
$q->searchFullName($request->seller);
});
我在模型中创建了一个范围,它适用于我网站上的另一个功能。但是,这样调用它时它不会返回任何结果。
即使我使用 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);
}
【问题讨论】:
-
你能搜索FullName 方法并显示完整的控制器方法
-
@JohnLobo 我都添加了
-
尝试 $orders = $orders->whereHas('user', function ($q) use ($request){ $q->where(function($q) use ($request){ $q->searchFullName($request->seller); }) });
-
不,这不起作用。结果仍然为空,没有错误。
-
尝试添加日志并检查它到达的地方
标签: laravel datatables relationship