Laravel具有两个条件的搜索查询

时间:2019-01-08 15:12:14

标签: mysql laravel-5 search

很抱歉,标题不清楚,我不确定该怎么写。

我正在创建用于过滤订单的搜索功能。每个订单都分配有一个用户ID或父ID(如果用户是子用户)(用于将订单与用户相关联)。

例如:userid,parentid,名称,产品,交付。

我的问题是:按名称搜索等将返回该名称的所有结果,无论您是否通过ID关联。

所以我基本上需要:其中userid或parentid =当前的userid 然后是搜索条件:或名称,产品或交货=搜索字词。

我目前正在通过检查所有搜索词匹配的数据库,然后在我的控制器中取消设置数据以仅输出与用户ID或父ID匹配的数据来进行此工作。有一个更好的方法吗?

订单控制器

$data = app('App\Http\Controllers\DbController')->getordersbysearch($search);
        foreach($data as $row => $key){
        if($key->Userid != $id || $key->parentid != $id){
            unset($data[$row]);                
        }
        else{
            $key->Response = json_decode($key->Response);
        }

dbcontroller

         public function getordersbysearch($search){
    $result = DB::table('orders')->where("Name", 'like', '%' . $search['search'] . '%')->orWhere("product", 'like', '%' . $search['search'] . '%')->orWhere("delivery", 'like', '%' . $search['search'] . '%')->get();
    return $result;
}   

1 个答案:

答案 0 :(得分:1)

将ID发送给函数:

$data = app('App\Http\Controllers\DbController')->getordersbysearch($search, $id);

然后更改您的功能以使用此ID:

public function getordersbysearch($search, $id) {
    $result = DB::table('orders')
        ->where(function($q) use ($id) {
            $q->where('parent_id',$id)
              ->orWhere('user_id',$id);
         })->where(function($q) use ($search) {
            $q->where("Name", 'like', '%' . $search['search'] . '%')
              ->orWhere("product", 'like', '%' . $search['search'] . '%')
              ->orWhere("delivery", 'like', '%' . $search['search'] . '%');
         })->get();
    return $result;
}

在我看来,这种控制器不应该存在。 “ DbController”应该是服务或模型等不同的层。