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

时间:2014-09-05 19:41:36

标签: php laravel laravel-4 eloquent

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

假设我有一个世界记录数据库,并希望为它创建一个api。假设我想添加一个search路由,其中​​包含GETPOST个参数(让我们保持简单,暂时只说GET)。是否可以编写一个search控制器方法,该方法使用类似数组的方法作为Eloquent的where方法的参数,同时还使用like参数(MySQL LIKE)?< / p>

我有以下内容,但仅适用于确切的值:

public function search()
{

    $params = Input::all();

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

}

1 个答案:

答案 0 :(得分:5)

你应该能够:

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

    $query = Records::newQuery();

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

    return $query->get();
}

在范围的上下文中,您可以获得更高级的信息:

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;
    }

}

然后你可以这样做:

$filtered = User::filter()->get();

或者

$filtered = User::filter(Input::only('name', 'age'))->get();