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