为了更好地解释这个问题,我只想举个例子:
假设我有一个世界记录数据库,并希望为它创建一个api。假设我想添加一个search
路由,其中包含GET
或POST
个参数(让我们保持简单,暂时只说GET
)。是否可以编写一个search
控制器方法,该方法使用类似数组的方法作为Eloquent的where
方法的参数,同时还使用like
参数(MySQL LIKE
)?< / p>
我有以下内容,但仅适用于确切的值:
public function search()
{
$params = Input::all();
return Records::where($params)->get();
}
答案 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();