khalyomede/laravel-odata-adaptable

根据 OData 查询字符串自动适应您的 Eloquent 模型。

v0.1.0 2019-12-08 18:24 UTC

This package is auto-updated.

Last update: 2024-09-29 05:22:16 UTC


README

根据 OData 查询字符串自动适应您的 Eloquent 模型。

Packagist Version Packagist Build Status Coverage Status Infection MSI Maintainability

摘要

关于

我需要自定义客户端应用程序如何从我的 Laravel REST API 获取结果。大多数情况下,我只需要过滤我想要从 API 获取的字段。我检查了 POData-Laravel,但发现它过于严格。

我希望有一个即插即用的解决方案,不会改变我使用现有 Eloquent 模型的现有方式,所以我决定创建这个库。

特性

  • 在您的模型上使用一个特性,这将使它们自动根据 OData 查询字符串修改结果
  • 支持以下 OData 关键词:$select$orderBy$top$skip
  • 如果使用 $select$hidden 列,将抛出错误
  • 已测试的 Laravel 版本
    • 5.8.*

需求

安装

添加依赖

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