Php Laravel查询生成器:基于用户输入的where条件

Php Laravel查询生成器:基于用户输入的where条件,php,laravel,laravel-4,Php,Laravel,Laravel 4,这是我的print\r($\u POST) array([id]=>'123',[name]=>'.[place]=>'.[color]=>'. 其中,name、place和color是用户提交的可选字段。。。。。用户只能选择名称,位置或颜色,名称+颜色,颜色+位置,或全部三个名称+颜色+位置 如何将用户选择的这些选项的条件放置在哪里?例如,在Laravel中,我们使用以下语句选择DB table $Select_db = Db::table('mytable')

这是我的
print\r($\u POST)

array([id]=>'123',[name]=>'.[place]=>'.[color]=>'.

其中,
name
place
color
是用户提交的可选字段。。。。。用户只能选择
名称
位置
颜色
名称+颜色
颜色+位置
,或全部三个
名称+颜色+位置

如何将用户选择的这些选项的
条件放置在哪里?例如,在Laravel中,我们使用以下语句选择DB table

 $Select_db = Db::table('mytable')
                  ->where('name', Input::get('name'))
                  ->where('place', Input::get('place'))
                  ->where('color', Input::get('color'))
                  ->select()
                  ->get();
正如您所看到的,只有当用户对所有字段都有输入时,上述条件才起作用,根据用户输入,我想添加
where
条件,我们如何解决这个问题

注意:在这个特定场景中,我知道我可以对每个条件使用
isset()
。但是,如果有许多可选输入怎么办

$Select_db = Db::table('mytable');
foreach($_POST as $key => $val) {
    $Select_db->where($key, Input::get($key));
}
$Select_db->query()->get();

可以考虑复制<代码> $POST <代码>,在输入<代码>前缀 >:

之前删除不希望的值。
unset($postcopy['badvar'])
那怎么办

$Select_db = Db::table('mytable');
foreach($_POST as $key => $val) {
    $Select_db->where($key, Input::get($key));
}
$Select_db->query()->get();

可以考虑复制<代码> $POST <代码>,在输入<代码>前缀 >:

之前删除不希望的值。
unset($postcopy['badvar'])
试试这个:-

$Select_db = DB::table('mytable');

if (Input::get('name') != "")
    $Select_db->where('name', Input::get('name'));

if (Input::get('place') != "")
    $Select_db->where('place', Input::get('place'));

if (Input::get('color') != "")
    $Select_db->where('color', Input::get('color'));

$result = $Select_db->get();
如果要匹配多个列,请尝试使用以下方法:-

$Select_db = DB::table('mytable'); 
foreach($_POST as $key => $val){
    if(Input::get($key) != ""){
        $Select_db->where($key, Input::get($key));
    }   
} 
$Select_db->get();
试试这个:-

$Select_db = DB::table('mytable');

if (Input::get('name') != "")
    $Select_db->where('name', Input::get('name'));

if (Input::get('place') != "")
    $Select_db->where('place', Input::get('place'));

if (Input::get('color') != "")
    $Select_db->where('color', Input::get('color'));

$result = $Select_db->get();
如果要匹配多个列,请尝试使用以下方法:-

$Select_db = DB::table('mytable'); 
foreach($_POST as $key => $val){
    if(Input::get($key) != ""){
        $Select_db->where($key, Input::get($key));
    }   
} 
$Select_db->get();

检查此链接可能对您有帮助@Sadikhasan他们正在为已知输入添加
多个where条件
。。但在我的情况下,它的未知输入似乎与我的问题不同…检查此链接可能对您有帮助@Sadikhasan他们正在为已知输入添加
多个where条件
。。但在我的情况下,它是未知输入似乎与我的问题不同。。。