【问题标题】:Search Query Laravel Input搜索查询 Laravel 输入
【发布时间】:2016-07-25 11:02:31
【问题描述】:

我有一个很大的搜索查询,一切都很好,但我需要向这个 blade

显示每个用户的包(研讨会)
 <tbody>
        @foreach($users as $i=>$user)
            <tr>
                <td>{{ $i+1 }}</td>
                <td>{{ $user->home_lastname }}</td>
                <td>{{ $user->home_firstname }} </td>
      //------> <td> HERE I NEED TO SHOW ALL THE PACKAGES NAMES(SEMINARS) FOR EACH USER</td>
                <td>{{ $user->home_id }}</td>
                <td></td>

用户控制器

 $builder = User::query();

    if (Input::has('lastname')) {
        $queryString = Input::get('lastname');
        $builder->where('home_lastname', 'LIKE', "%$queryString%");
    }

    if (Input::has('name')) {
        $queryString = Input::get('name');
        $builder->where('home_firstname', 'LIKE', "%$queryString%");
    }

    if (Input::has('id')) {
        $queryString = Input::get('id');
        $builder->where('home_id', 'LIKE', "%$queryString%");
    }

    if (Input::has('type-select')){
        $userType = Input::get('type-select');
        $builder->select('*')
            ->where('Home_Students.home_elv_rights',$userType)
            ->get();
    }


    if(Input::has('seminar-select')){
        $seminar = Input::get('seminar-select');
        $builder->select('*')
            ->join('Home_StudentPackages','Home_StudentPackages.hsp_homeStudID','=','Home_Students.home_id')
            ->join('Home_Packages','Home_Packages.Package_ID','=','Home_StudentPackages.hsp_packid')
            ->where('Home_Packages.Package_ID',$seminar)
            ->get();
    }

    if(Input::has('class-select')){
        $class = Input::get('class-select');
        $builder->select('*')
            ->join('Hw_StudentClasses','Hw_StudentClasses.Stclass_studentid','=','Home_Students.home_id')
            ->join('Hw_Classes','Hw_Classes.Class_id','=','Hw_StudentClasses.Stclass_classid')
            ->where('Hw_Classes.Class_id',$class)
            ->get();
    }

    if(Input::has('date_created_from')) {
        $date = date("Y-m-d", strtotime(Input::get('date_created_from')));
        $builder->select('*')
            ->whereBetween('Home_Students.home_dateCreated', [$date, date("Y-m-d")])
            ->get();
        }
        elseif(Input::has('date_created_from','date_created_untill')){
            $date = date("Y-m-d", strtotime(Input::get('date_created_from')));
            $date2 = date("Y-m-d", strtotime(Input::get('date_created_untill')));
            $builder->select('*')
                ->whereBetween('Home_Students.home_dateCreated', [$date,$date2])
                ->get();
            }
            elseif(Input::has('date_created_untill')){
            $date2 = date("Y-m-d", strtotime(Input::get('date_created_untill')));
            $date = date("Y-m-d", strtotime(Input::get('date_created_from')));
                $builder->select('*')
                ->whereBetween('Home_Students.home_dateCreated',[$date,$date2])
                ->get();
            }




    // ... more clauses from the querystring
    $users = $builder->orderBy('home_lastname')->get();



        return View::make('user.show')->with(array('users' => $users));
    } 

我尝试了这些连接到 start $builder 查询和控制器末尾的构建器,但它没有工作。此外,每个 if 中的 wheres 都不起作用,所以我不知道有其他方法可以做到这一点。

DB::table('Home_Students')
            ->select('home_lastname','home_firstname','home_id','Package_Name')
            ->join('Home_StudentPackages','Home_StudentPackages.hsp_homeStudID','=','Home_Students.home_id')
            ->join('Home_Packages','Home_Packages.Package_ID','=','Home_StudentPackages.hsp_PackID'
            ->get();

我只需将每个用户的 Packages_Names 显示到我的刀片视图中,但通过研讨会(包)进行搜索时出现问题。

编辑

我正在尝试在用户模型中创建公共函数,我将在其中获取每个用户的所有包(研讨会);你知道有什么办法吗?

有一个组合用户和包的数据透视表!

EDIT 2我认为这是错误的,因为它返回 [{"Package_Name":"Excel"}] - 是否可以将其作为字符串返回?

 public function getUserSeminars(){



        $users = Seminar::select('Package_Name')
            ->join('Home_StudentPackages','Home_StudentPackages.hsp_PackID','=','Home_Packages.Package_ID')
            ->join('Home_Students','Home_Students.home_id','=','Home_StudentPackages.hsp_homeStudID')
            ->where('Home_Students.home_id','=',$this->home_id)
            ->get();

        return $users;
    }

【问题讨论】:

    标签: php laravel search controller


    【解决方案1】:

    不要让搜索查询如此复杂,在控制器内部我转到我的用户模型并执行此功能:

    public function getUserSeminars(){
    
    
            $seminar = Seminar::select('Package_Name')
                ->join('Home_StudentPackages','Home_StudentPackages.hsp_PackID','=','Home_Packages.Package_ID')
                ->join('Home_Students','Home_Students.home_id','=','Home_StudentPackages.hsp_homeStudID')
                ->where('Home_Students.home_id','=',$this->home_id)
                ->get();
    
            return $seminar;
    
    
    
        }
    

    然后我像这样在刀片中调用它

                    <td>
                        @foreach($user->getUserSeminars() as $seminar)
                            <li>    {{$seminar->Package_Name}}  </li>
                        @endforeach
                    </td>
    

    它就像一个魅力。 希望这对某人也有帮助!

    【讨论】:

    • 意识到您正在使用这种方法运行 n+1 个查询。
    • 我不能用另一种方法做到这一点,因为我有一个 if 执行相同的查询,所以它会以任何其他方式崩溃,而我尝试的另一种方式给了我结果,但它给了我 3 或 4 倍的用户对于每个研讨会,我无法做出区分或其他问题,您还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2021-08-23
    • 2018-10-21
    • 2015-06-09
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多