khalyomede / laravel-odata-adaptable
根据 OData 查询字符串自动适应您的 Eloquent 模型。
v0.1.0
2019-12-08 18:24 UTC
Requires
Requires (Dev)
- infection/infection: 0.*
- laravel/framework: 5.8.*
- php-coveralls/php-coveralls: 2.*
- phpunit/phpunit: 8.*
This package is auto-updated.
Last update: 2024-09-29 05:22:16 UTC
README
根据 OData 查询字符串自动适应您的 Eloquent 模型。
摘要
关于
我需要自定义客户端应用程序如何从我的 Laravel REST API 获取结果。大多数情况下,我只需要过滤我想要从 API 获取的字段。我检查了 POData-Laravel,但发现它过于严格。
我希望有一个即插即用的解决方案,不会改变我使用现有 Eloquent 模型的现有方式,所以我决定创建这个库。
特性
- 在您的模型上使用一个特性,这将使它们自动根据 OData 查询字符串修改结果
- 支持以下 OData 关键词:
$select
、$orderBy
、$top
和$skip
- 如果使用
$select
和$hidden
列,将抛出错误 - 已测试的 Laravel 版本
- 5.8.*
需求
- PHP >= 7.2.0
- Composer
安装
添加依赖
composer require khalyomede/laravel-odata-adaptable
使用
将 OdataAdaptable
特性添加到您的现有模型中。
// app/Book.php namespace App; use Illuminate\Database\Eloquent\Model; use Khalyomede\OdataAdaptable; class Book extends Model { use OdataAdaptable; }
您应该有一个类似的路由
// routes/api.php Route::resource("book", "BookController");
在您的控制器中,添加对 Eloquent 模型适应 OData V4 查询字符串的能力,如下所示
namespace App\Http\Controllers; use App\Book; use Illuminate\Http\Request; class BookController extends Controller { public function index(Request $request) { return Book::adapt($request)->get(); } }
现在,如果您运行此 HTTP 查询
GET /api/book
您将得到
[
{
"id": 1,
"authorId": 1,
"name": "Build an SPA using Gulp & Vue.js"
}
]
但是,如果您使用 OData 查询字符串,您将能够做
GET /api/book?$select=name
并且您将得到
[
{
"name": "Build an SPA using Gulp & Vue.js"
}
]
示例
1. 首次调用它
在这个示例中,我们将调用 adapt
方法来根据控制器请求接收到的查询字符串调整我们的 Eloquent ORM 结果。下面的文件是从一个假设的控制器中提取的。
class BookController extends Controller { public function index(Request $request) { $books = Book::adapt($request)->get(); } }
2. 在对 Eloquent 查询构建器的先前调用之后链式调用它
在这个示例中,我们将在一些方法之后调用 adapt
方法,以向您展示即使对 Eloquent 查询的结果进行了现有更改,您仍然可以利用这个库。
class VueJsBookController extends Controller { public function index(Request $request) { $books = Book::where("name", "like", "Vue.js")->adapt($request)->get(); } }
API
public function adapt(Illuminate\Http\Request $request): Illuminate\Database\Eloquent\Builder;
参数
Request $request
:来自您的控制器的请求。它将用于使用$request->fullUrl()
提取 URL。
返回
一个 Builder
实例,允许您链式调用其他查询构建器方法。
异常
有关由 OdataQueryParser 抛出的所有异常的信息。
已知问题
以下 OData V4 查询字符串命令将无法使用
- count
- filter