我看到一些API有简单的查询,可以在url中构建.例如,我有产品型号的产品表.
产品表属性:
> id
> product_name
>条形码
> category_id
>描述
>价格
如何在url中进行查询,如下所示(fields参数表示选择那些指定的字段):
http://example.com/product?fields=id,product_name,price,barcode\u0026amp;sortby=price
或者像这样得到价格等于10.00:
http://example.com/product?fields=id,product_name,price,barcode\u0026amp;price=10.00
我知道在laravel中我们可以使用$request-> has()检查获取参数,并使用$request->输入(‘fieldname)来获取值,以逐个检查和检索值
但我认为应该有更好的方法,或者可能有一个包装函数可以用于所有控制器从url get参数读取查询.
谢谢
解决方法:
好的,我们走了.我会尽力说教.
去做
$props = [
'id',
'product_name',
'barcode',
'category_id',
'description',
'price'
];
参数
让我们将来自URL的所有参数存储在变量中:
$parameters = Input::all();
没有参数
如果传递了任何参数,我们可以选择包含其字段的所有产品并返回结果:
if (empty($parameters)) {
$products = Product::all();
return $products;
}
组织事物
让我们考虑一下我们有3个“类别”的参数:
>这决定了要选择的字段(可选).
>这决定了结果顺序(可选).
>这决定了搜索条款(可选).
识别字段
对于第一个类别,我们将使用fields参数来接收用逗号分隔每个字段的字符串.
$fieldsParam = $parameters['fields']; // Gets fields string.
$fieldsParamSplit = explode(',', $fieldsParam); // Split the fields string into array.
$fields = array_intersect($props, $fieldsParamSplit); // Gets only wanted fields.
命令
对于第二类,我们将使用接收特定字段(属性)名称的sortby参数.
$orderProp = null;
// Check if parameter "sortby" exists and if it is valid.
if (isset($parameters['sortby']) && in_array($parameters['sortby'], $props)) {
$orderProp = $parameters['sortby'];
}
有一些条款?
对于第三类,我们将使用所有参数(上面提到的参数除外)来构建搜索的where子句.
$clauses = [];
foreach ($props as $prop) {
// Check if the current property is present in parameters.
if (in_array($prop, array_keys($parameters))) {
// Each item represents a where clause.
$clauses[$prop] = $parameters[$prop];
}
}
建立集合
现在所有的参数都经过验证,我们可以构建产品集合并返回结果.
if ($orderProp) {
$products = Product::where($clauses)->orderBy($orderProp)->get($fields);
} else {
$products = Product::where($clauses)->get($fields);
}
return $products;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。