我在Laravel中创建一个API,并使用查询字符串来处理复杂的查询。
可以轻松处理url/item/?color=red&age=3...
之类的查询,以收集所有红色和3年的物品。
但这是因为这些是为了相等而被查询的离散变量。比方说,我想检索在特定日期之后注册的所有用户。我该如何处理?
我想的可能是:
url/item/?registered_later_than=DDMMYYYY
有更好的方法吗?
答案 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
运营商可以是:
或者你想要什么(也许它在全文中更具可读性:“greater_than”等)。希望我能理解你的问题,它会对你有所帮助。