查询字符串和Laravel(具有不等式)

时间:2014-12-21 22:42:01

标签: laravel

我在Laravel中创建一个API,并使用查询字符串来处理复杂的查询。

可以轻松处理url/item/?color=red&age=3...之类的查询,以收集所有红色和3年的物品。

但这是因为这些是为了相等而被查询的离散变量。比方说,我想检索在特定日期之后注册的所有用户。我该如何处理?

我想的可能是:

url/item/?registered_later_than=DDMMYYYY

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

我建议这样的事情:

url/item/?registered=>:DDMMYYYY
  • 参数名称是属性的名称
  • 参数值的开头右边是运算符
  • 运算符和值之间用:分隔(它实际上可以是您想要的任何分隔字符)

其他例子:

url/item/?name=like:foo
url/item/?email==:foo.bar@example.com

我同意email==:foo看起来有点奇怪。您也可以使用单词或缩写(" eq"," gt"等)代替操作符号。

如何解析

$filters = Input::all();
$query = Model::newQuery();
foreach($filters as $attribute => $filter){
    $parts = explode(':', $filter, 2);
    $operator = $parts[0];
    $value = $parts[1];
    $query->where($attribute, $operator, $value);
}

我希望这会让你知道如何做到这一点;)

答案 1 :(得分:0)

不是真正的“更好的方式”,但你可以尝试这样的事情:

url/item/?operator=lt&date=20141223

运营商可以是:

  • lt :小于
  • gt :大于
  • eq :等于

或者你想要什么(也许它在全文中更具可读性:“greater_than”等)。希望我能理解你的问题,它会对你有所帮助。