【问题标题】:Laravel search query with two conditions具有两个条件的 Laravel 搜索查询
【发布时间】:2019-06-03 07:34:46
【问题描述】:

抱歉,如果标题不清楚,我不确定如何措辞..

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

例如:用户 ID、父母 ID、姓名、产品、交货。

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

所以我基本上需要:其中 userid 或 parentid = current userid 后跟搜索条件:orwhere name, orwhere product, orwhere delivery = search term。

我目前通过检查数据库中的所有搜索词匹配,然后取消设置控制器中的数据以仅输出匹配用户 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);
        }

数据库控制器

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

【问题讨论】:

    标签: mysql laravel-5 search


    【解决方案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”应该是不同的层,如服务或模型。

    【讨论】:

    • 谢谢,我应该包括我已经像这样发送 id:$search = ['Id'=>$id, 'search'=>$search];
    • 在这种情况下,将$id 替换为$search['id'];
    • 没错!该函数最初没有使用 user/parentid 过滤订单(我想我在某处犯了一个小错误),但正是我正在寻找的,谢谢。我能问一下为什么您认为使用服务或模型比使用 dbcontroller 更好吗?我对 laravel 比较陌生..
    • 与 laravel 本身无关,与 MVC 模式有关。控制器应仅用于在视图和其他层之间获取/发送数据。基本上,它只委托给实际实现业务逻辑的人。您可以在 Google 上搜索 MVC 模式、服务层模式并了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多