Php 有没有一种方法可以使用基于输入参数的有说服力的查询?

Php 有没有一种方法可以使用基于输入参数的有说服力的查询?,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,为了更好地解释这个问题,我只举一个例子: 假设我有一个世界记录数据库,并希望为其创建一个api。假设我想添加一个search路径,该路径采用GET或POST参数(让我们保持简单,现在只说GET)。是否可以编写一个search控制器方法,该方法使用数组之类的参数作为Eloquent的where方法的参数,同时也使用like参数(MySQLlike) 我有以下方法,但仅适用于精确值: public function search() { $params = Input::all();

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

假设我有一个世界记录数据库,并希望为其创建一个api。假设我想添加一个
search
路径,该路径采用
GET
POST
参数(让我们保持简单,现在只说
GET
)。是否可以编写一个
search
控制器方法,该方法使用数组之类的参数作为Eloquent的
where
方法的参数,同时也使用
like
参数(MySQL
like

我有以下方法,但仅适用于精确值:

public function search()
{

    $params = Input::all();

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

}
您应该能够:

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();

您应该能够:

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();


谢谢,布莱恩,在这种情况下,这是一种更好的方式。我会将这段代码放入查询范围()。然后,控制器代码看起来会更干净,并且查询构建正在模型中进行。谢谢。如果这在文档中就好了。。。至少它在API中,但这对新的Laravel用户没有多大帮助。:)同意,这就像复活节彩蛋文档一样,写得很好,但许多隐藏的宝石都与激情编码器一致。这应该是模型或基本模型类上的查询范围。然后您可以执行Model::search($values);谢谢,布莱恩,在这种情况下,这是一种更好的方式。我会将这段代码放入查询范围()。然后,控制器代码看起来会更干净,并且查询构建正在模型中进行。谢谢。如果这在文档中就好了。。。至少它在API中,但这对新的Laravel用户没有多大帮助。:)同意,这就像复活节彩蛋文档一样,写得很好,但许多隐藏的宝石都与激情编码器一致。这应该是模型或基本模型类上的查询范围。然后您可以执行Model::search($values);