matteomeloni / laravel-rest-ql
通过HTTP请求将查询构建到Laravel模型中的简单方法
1.0.5
2023-01-18 17:46 UTC
Requires
- php: ^8.0
- illuminate/support: ~9
Requires (Dev)
- orchestra/testbench: ~7
- phpunit/phpunit: ~9.0
README
通过HTTP请求将查询构建到Laravel模型中的简单方法。
安装
通过Composer
$ composer require matteomeloni/laravel-rest-ql
使用方法
通过Matteomeloni\LaravelRestQl\LaravelRestQl
扩展你的模型
<?php namespace App\Models; use Matteomeloni\LaravelRestQl\LaravelRestQl; class Book extends LaravelRestQl { // }
在控制器中,你可以使用restQl
作用域来执行新的查询
<?php namespace App\Http\Controllers; use App\Models\Book; class BookController extends Controller { public function index() { $books = Book::restQL() ->get(); return response()->json($books); } }
如何构建查询
构建查询有三种方式。
传递数组
<?php namespace App\Http\Controllers; use App\Models\Book; class BookController extends Controller { public function index() { $data = [ 'search' => '' 'columns' => [], 'filters' => [], 'sorts' => [] ]; $books = Book::restQL($data)->get(); return response()->json($books); } }
通过HTTP请求传递数据。
你可以通过http url参数
或http请求头
传递数据。
在这种情况下,格式是JSON,你可以使用base64进行数据编码。
<?php //Route: /api/books?select=[]&filters=[]&sorts=[]&search='' namespace App\Http\Controllers; use App\Models\Book; class BookController extends Controller { public function index() { $books = Book::restQL()->get(); return response()->json($books); } }
示例
选择列
URL: /api/books
Parameter: columns
/api/books?columns=["title", "description"]
搜索字符串
在表的全部列或可填充属性中搜索字符串。
URL: /api/books
Parameter: search
/api/books?search=laravel
WHERE条件
可用的比较运算符:=
!=
<
<=
>
>=
like
not like
in
not in
between
not between
null
not null
URL: /api/books
Parameter: filters
/api/books?filters=[{"column":"category_id","operator":"=","value":1}]
/api/books?filters=[{"column":"category_id","operator":"between","value":[1,10]}]
/api/books?filters=[{"column":"category_id","operator":"in","value":[1,3,5]}]
/api/books=filters=[{"column":"category_id","operator":"=","value":1},{"column":"title","operator":"like","value":"PHP"}]
可以通过逻辑或将两个或多个条件连接起来。
URL: /api/books
Parameter: filters
/api/books?filters=[{"column":"category_id","operator":"=","value":1},{"column":"category_id","operator":"=","value":3,"boolean":"or"}]
多个"WHERE"子句可以分组在括号中以在查询中实现逻辑分组。
URL: /api/books
Parameter: filters
/api/books?filters=[{"column":"title","operator":"like","value":"PHP"},[{"column":"category_id","operator":"=","value":1},{"column":"category_id","operator":"=","value":3,"boolean":"or"}]]
排序
URL: /api/books
Parameter: sorts
/api/books?sorts=[{"column":"title"}]
/api/books?sorts=[{"column":"title", "direction":"desc"}]
/api/books?sorts=[{"column":"title"},{"column":"category_id","direction":"desc"}]
要求
-
php 8.0或更高版本
-
Laravel 9
测试
$ composer test
变更日志
请参阅变更日志了解最近的变化。
贡献
请参阅contributing.md了解详细信息和一个待办事项列表。
安全
如果您发现任何与安全相关的问题,请通过电子邮件matteomelonig@gmail.com联系,而不是使用问题跟踪器。
鸣谢
许可
MIT。请参阅许可文件了解更多信息。