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>