Laravel 8 & Yajra 数据表复杂搜索
Laravel 8 & Yajra Datatables complicated search
我有一个数据表可以获取订单并且可以正常工作和显示。我向发起订单的用户显示订单。然后他们只能搜索自己的订单。现在我需要向用户显示一条消息,如果找到一个订单但它是由另一个用户发起的,而不是在数据表中显示空结果。这将在搜索框中键入内容后发生,而不是在开始加载数据表时发生。问题是查询已经按用户 ID 过滤结果,因此我无法在手动搜索期间更改它。
如果需要,我可以显示代码,但功能非常大,我真的不需要代码,但 logic/way 这样做。
你对我如何完成这个有什么建议吗?
好吧,也许这不是最好的方法,但我就是这样解决的:
在控制器中,我检查搜索字段,并运行查询关系,但仅限于卖家与登录用户不同的订单:
$otherSeller = "";
if(!empty($request->search['value']))
{
$ordersOtherSeller = Order::where('status_id', "!=", 3)->where('seller_id', '!=', $loggedUser->id)->whereHas('user', function ($q) use ($request){
$q->searchFullName($request->search['value']);
})->first();
if($ordersOtherSeller != NULL && $ordersOtherSeller->count() > 0)
$otherSeller = $ordersOtherSeller->user->full_name . ' ' . $ordersOtherSeller->seller->full_name;
}
然后我使用 table 的 json:
设置了一个自定义变量...
->with('otherSeller', $otherSeller)
->make(true);
然后在数据table jquery drawCallBack 上,我检查填充的字符串,保证当前用户的查询不会返回结果:
fnDrawCallback: function( oSettings ) {
var api = this.api();
if(api.ajax.json().otherSeller != "")
{
$('#alert-info span').text(api.ajax.json().otherSeller);
$('#alert-info').show();
}
else
$('#alert-info').hide();
},
最后是使用更新的文本切换 materialert 元素:
<div id="alert-info" class="materialert info" style="display: none;">
<i class="material-icons">info</i> <span></span>
<button type="button" class="close-alert">×</button>
</div>