laravel双条件搜索查询

nwnhqdif  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(325)

抱歉,如果标题不清楚,我不知道该怎么说。。
我正在创建一个搜索函数来过滤订单。每个订单都分配了一个用户id或父id(如果用户是子用户),用于将订单与用户关联起来。
例如:userid,parentid,name,product,delivery。
我的问题是:按名称等搜索将返回该名称的所有结果,而不管您是否按id关联。
所以我基本上需要:where userid或parentid=current userid后跟搜索条件:orwhere name,orwhere product,orwhere delivery=search term。
我目前的工作方式是检查数据库中所有搜索词的匹配,然后在我的控制器中取消设置数据,只输出与userid或parentid匹配的数据。有没有更好的办法?
顺序控制器

$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);
        }

数据库控制器

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;
}
c90pui9n

c90pui9n1#

将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“应该是一个不同的层,比如服务或模型。

相关问题