有没有办法建立一个基于雄辩的输入参数的查询?

ten*_*nub 0 php laravel eloquent laravel-4

为了更好地解释这个问题,我将举一个例子:

假设我有一个世界记录数据库,并希望为它创建一个api.假设我想添加一个接收search路径GETPOST参数(让我们保持简单,GET现在就说).是否有可能编写一个search控制器方法,它使用类似数组的东西作为Eloquent where方法的参数,同时还使用like参数(MySQL LIKE)?

我有以下工作,但仅适用于确切的值:

public function search()
{

    $params = Input::all();

    return Records::where($params)->get();

}
Run Code Online (Sandbox Code Playgroud)

Ant*_*iro 5

你应该能够:

public function search()
{
    $params = Input::all();

    $query = Records::newQuery();

    foreach($params as $key => $value)
    {
       $query->where($key, 'LIKE', "%$value%")
    }

    return $query->get();
}
Run Code Online (Sandbox Code Playgroud)

在范围的上下文中,您可以获得更好的:

class User extends Eloquent {

    public function scopeFilter($query, $input = null)
    {
        $input = $input ?: Input::all();

        foreach($input as $key => $value)
        {
            if (Schema::hasColumn($this->getTable(), $key))
            {
                $query->where($key, 'LIKE', "%$value%")
            }
        }

        return $query;
    }

}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

$filtered = User::filter()->get();
Run Code Online (Sandbox Code Playgroud)

要么

$filtered = User::filter(Input::only('name', 'age'))->get();
Run Code Online (Sandbox Code Playgroud)