Laravel Spatie Query Builder:使用 Axios 使用 API 的正确方法
Posted
技术标签:
【中文标题】Laravel Spatie Query Builder:使用 Axios 使用 API 的正确方法【英文标题】:Laravel Spatie Query Builder: right way to consume API with Axios 【发布时间】:2020-08-09 00:42:24 【问题描述】:在 Laravel 后端我有 customers.index
控制器方法:
$result = $department->Customers()->getQuery();
$result = QueryBuilder::for($result)
->allowedFilters([
'title',
'description',
'email',
'phone'
])
->defaultSort('title')
->allowedSorts([
'title',
'email'
]);
$result = $result->paginate($request->per_page ?: 10)->appends(request()->query());
return response()->json([
'message' => '',
'data' => $result
]);
现在在 Vuejs 前端我希望查询字符串像
host/api/customer?page=2&per_page=15&filter[title]=foo
我试过这种方法:
const params =
page: this.page,
per_page: 15,
filter:
search: this.query
;
console.log(JSON.stringify(params));
this.$axios
.get(`/api/customer`,
params
);
但是查询字符串变成了:
customer?0=%7B%22page%22:1,%22per_page%22:15,%22filter%22:%7B%22search%22:%221231%22%7D%7D
我还有其他选择:使用 template literal like :
api/customer?filter[search]=$this.query&page=$this.page&per_page=$this.per_page
问题一:
如何从 params 对象中获取正确的查询字符串
问题 2:
有没有关于这种filter[title]=...
查询字符串方式的文档?我如何在 AND 或案例中使用它们?
【问题讨论】:
【参考方案1】:您的问题是您将查询字符串设置为选项。
this.$axios
.get(`/api/customer`,
params
);
应该是。
this.$axios
.get(`/api/customer`,
params: params
);
他们有一个Documentation。如果您想做复杂的逻辑,我可能会研究它如何处理scopes。然后你是否在Laravel
范围内进行逻辑处理并让构建器处理它们。
【讨论】:
以上是关于Laravel Spatie Query Builder:使用 Axios 使用 API 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章
laravel-用户活动以及模型变动日志-spatie/laravel-activitylog
Laravel 5.7 + Spatie 权限 + JWT 身份验证
如何使用 laravel 8 +jetstream + spatie 为注册用户分配角色
Spatie / Laravel cors在生产中的问题[重复]
它是如何工作的 ?使用 Spatie/laravel-cronless-schedule 自定义的 Laravel 时间表
Spatie/Newsletter:Laravel 5.6 中提供的 MailChimp 无效 MailChimp API 密钥