Laravel - Eloquent ORM搜索功能

时间:2014-03-02 13:05:05

标签: php laravel validation

我想创建一个函数,它将从单个搜索输入中搜索表中的所有记录。我做了一个简单的搜索,从输入获取值,在foreach循环中,我收到与搜索相关的结果数组。

控制器功能

public function getSearch(){
    $input = Input::get('search');

    $validator = Validator::make($input, array(
            'search' => 'required'
        )
    );

    if($validator->fails()){
        die('error');
    } else {
      $search_terms = explode(' ', $input);

      foreach($search_terms as $term)
      {
          $query = Upload::where('filename', 'LIKE', '%'.$term.'%');
      }

      $results = $query->get();
      die($results);
    }
}

在验证器中,我只有一个参数使其成为必需的并在数组中传递。

'search' => 'required'

我认为我收到此错误的原因是因为我只在验证器的数组中传递了一个参数?

ErrorException
Argument 1 passed to Illuminate\Validation\Factory::make() must be of the type array, string given, called in /www/assetlibr/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 211 and defined

更新:因为验证器不是最佳实践,所以我删除了验证器并添加了一个if语句,如

if(Input::has('search'))

现在正在完美运作!

2 个答案:

答案 0 :(得分:2)

传递给make的第一个参数需要是数组。你给字符串..

查看文档: http://laravel.com/docs/validation

将您的代码更改为:

    $serach = Input::get('search');

    $validator = Validator::make(
                array(
            'search' => $search,
                ), 
                array(
            'search' => 'required'
                )
     );

答案 1 :(得分:0)

Validator需要两个数组,一个用于数据,另一个用于验证规则,所以是的,你在Validator::make()调用中缺少它。以下是您应该如何执行验证:

$input = array('search' => Input::get('search'));

$validator = Validator::make($input, array(
        'search' => 'required'
    )
);