php - 搜索查询 Laravel 输入

标签 php laravel search controller

我有一个很大的搜索查询,一切都很好,但我需要向这个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>

用户 Controller

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

我尝试将这些连接连接到开始 $builder 查询和 Controller 末尾的构建器,但没有成功。此外,每个 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 显示到我的 Blade View 中,但是按 Seminar (Packages) 进行的搜索存在问题。

编辑

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

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

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

最佳答案

为了不让搜索查询变得如此复杂,我在 Controller 内部进入了我的用户模型并执行了这个功能:

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;



    }

然后我在 Blade 中这样调用它

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

它就像一个魅力。 希望这也能帮助别人!

关于php - 搜索查询 Laravel 输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36427479/

相关文章:

php - zend-framework 对比 Kohana 对比 Symfony

php - 管理员身份验证的 img 未加载到 Laravel 8 中

php - Laravel-8 中 Auth::onceUsingID() 和 Auth::setUser() 有什么区别

search - 使用 Redis 从集合中反向搜索

algorithm - 非递归 dfs(何时标记它已访问?)

php - 在 PHP MYSQL 中使用 Google Chart

php - mysql_fetch 无法收集数据库中的所有数据

php - Zend 框架 : set Module as Subdomain

php - Laravel PHP fatal error : Class 'Table' not found with migrate command

php - 标记层次结构和搜索