Php 带多条件过滤器的雄辩where子句

Php 带多条件过滤器的雄辩where子句,php,laravel,laravel-5.1,Php,Laravel,Laravel 5.1,在我的数据库表中,我有一个名为student add的表,我想获取具有以下所有条件的特定学生,这些条件存储在过滤器数组中,并带有其他选项(“like name可以是middlename或lastname”) 我正试图用以下代码获取该数据 我在这里使用的是advance where子句,但它在第一个参数(如名称)中运行,这只意味着我得到了valuewhere name=filters['value']为什么会这样 为什么在查询中使用case?只需使用多个where子句编写2,并使用if语句:)为该

在我的数据库表中,我有一个名为student add的表,我想获取具有以下所有条件的特定学生,这些条件存储在过滤器数组中,并带有其他选项(“like name可以是middlename或lastname”)

我正试图用以下代码获取该数据

我在这里使用的是advance where子句,但它在第一个参数(如名称)中运行,这只意味着我得到了valuewhere name=filters['value']为什么会这样


为什么在查询中使用case?只需使用多个where子句编写2,并使用
if
语句:)为该SQL选择它

select * from `students` where ((`firstname` = ? or `middlename` = ? or `lastname` = ?) and `rollnumber` = ?)

    $student = Student::where(function ($query) use ($filters) {

        foreach($filters as $filter) {
            switch($filter['type']){
                case 'name' :
                    $query->where(function ($query) use ($filter) {
                        $query->where('firstname', $filter['value'])
                            ->orWhere('middlename', $filter['value'])
                            ->orWhere('lastname', $filter['value']);
                    });//This will add a parenthesis for all wheres
                    break;
                case 'roll' :
                    $query->where('rollnumber', $filter['value']);
                    break;

            }
        }
    })
        ->get();//Replace get with toSql to see SQL
对于此SQL

select * from `students` where ((`firstname` = ? or `middlename` = ? or `lastname` = ?) or `rollnumber` = ?)

    $student = Student::where(function ($query) use ($filters) {

        foreach($filters as $filter) {
            switch($filter['type']){
                case 'name' :
                    $query->orWhere(function ($query) use ($filter) {//add or where for or where
                        $query->where('firstname', $filter['value'])
                            ->orWhere('middlename', $filter['value'])
                            ->orWhere('lastname', $filter['value']);
                    });//This will add a parenthesis for all wheres
                    break;
                case 'roll' :
                    $query->orWhere('rollnumber', $filter['value']);//add or where for or where
                    break;

            }
        }
    })
        ->get();//Replace get with toSql to see SQL
select * from `students` where ((`firstname` = ? or `middlename` = ? or `lastname` = ?) and `rollnumber` = ?)

    $student = Student::where(function ($query) use ($filters) {

        foreach($filters as $filter) {
            switch($filter['type']){
                case 'name' :
                    $query->where(function ($query) use ($filter) {
                        $query->where('firstname', $filter['value'])
                            ->orWhere('middlename', $filter['value'])
                            ->orWhere('lastname', $filter['value']);
                    });//This will add a parenthesis for all wheres
                    break;
                case 'roll' :
                    $query->where('rollnumber', $filter['value']);
                    break;

            }
        }
    })
        ->get();//Replace get with toSql to see SQL
select * from `students` where ((`firstname` = ? or `middlename` = ? or `lastname` = ?) or `rollnumber` = ?)

    $student = Student::where(function ($query) use ($filters) {

        foreach($filters as $filter) {
            switch($filter['type']){
                case 'name' :
                    $query->orWhere(function ($query) use ($filter) {//add or where for or where
                        $query->where('firstname', $filter['value'])
                            ->orWhere('middlename', $filter['value'])
                            ->orWhere('lastname', $filter['value']);
                    });//This will add a parenthesis for all wheres
                    break;
                case 'roll' :
                    $query->orWhere('rollnumber', $filter['value']);//add or where for or where
                    break;

            }
        }
    })
        ->get();//Replace get with toSql to see SQL