如何通过Laravel中的标准数组构建流畅的查询

时间:2012-11-26 20:29:07

标签: laravel

如果我在DB标准中存储我想用来构建和过滤查询的内容 - 如何使用Laravel Fluent Query Builder构建查询?也许你可以提供重构这个数组的建议来添加OR / AND以根据这些条件进行复杂的过滤?谢谢!

例如,如果我从数据库中读取这些条件并制作数组:

$array = array(
    '0' => array(
        'table' => 'users',
        'column' => 'name',
        'criteria' => 'LIKE'
        'value' => 'John'
    ),
    '1' => array(
        'table' => 'groups',
        'column' => 'name',
        'criteria' => 'NOT LIKE'
        'value' => 'Administrator'
    ),
    ...
) 

1 个答案:

答案 0 :(得分:1)

如果您确实按照自己的方式进行操作,请创建一个switch语句来设置数组索引的标志

switch ($query)
 {
 case 0:
   $this->get_data($x);
   break;
 case 1:
   $this->get_data($x);
   break;
 case 2:
   $this->get_data($x);
   break;
 default:
   Return FALSE;
 }
public function get_data($x){
$value = DB::table($array[$x]['table'])
->where($array[$x]['name'], $array[$x]['criteria'], $array[$x]['value'])
->get();

Return $value;
}

但是,我根本不会这样做。我不应该将查询过滤器存储在数组中,而是应该在模型中创建它们。这将有助于提高可读性,模块化和可重用代码。

public function get_user_by_name($name){
 $user = DB::table('users')->where('name', 'LIKE', '%'.$name.'%')->get();
 return $user;
}

public function get_group_by_name($name, $criteria = 'LIKE'){
 $groups = DB::table('groups')->where('name', $criteria, '%'.$name.'%')->get();
 return $groups;
}

http://laravel.com/docs/database/fluent