lexxsoft/odata

Laravel OData 请求解析器

1.2.1 2024-09-01 11:54 UTC

README

Latest Stable Version GitHub Package validation status PHP Version Require License Total Downloads

内容

安装

要求

设置

composer require lexxsoft/odata

安装后,所有路由 /odata/* 都将可访问

php artisan vendor:publish --provider="Lexxsoft\Odata\Providers\OdataServiceProvider"

之后将出现 config/odata.php 文件。

更新模型要求

要将模型作为 OData 实体,必须使用 Restable 特性。

use LexxSoft\odata\Traits\Restable;

class Log extends Model
{
    use HasFactory, Restable;
}

OData 功能

  • 元数据
  • CRUD
    • Create
    • Read
    • Update
    • Delete
  • OData 实体
  • OData 请求
    • 资源路径
      • 简单请求(例如 /odata/category
      • 计数请求(例如 /odata/category/$count
      • 通过键请求(例如 /odata/category(1)
      • 单个字段值请求(例如 /odata/category(1)/name
      • 值请求(例如 /odata/category(1)/name/$value
      • 嵌套实体请求(例如 /odata/category(1)/products
      • 计数嵌套实体(例如 /odata/category(1)/products/$count
      • 深度嵌套实体(例如 /odata/category(1)/products(2)/supplier/address/city/$value
    • 系统查询选项
      • $orderby
      • $top
      • 跳过
      • $filter
        • EQ
        • NE
        • GT
        • GE
        • LT
        • LE
        • AND
        • OR
        • NOT
        • substringof
        • endswith
        • startswith
      • $expand
        • 简单展开(例如 $expand=products
        • 深度展开(例如 $expand=products/supplier
        • 带计数展开(例如 $expand=products($count=true)
      • $select
      • $count=true(例如 $inlinecount
    • 自定义查询选项(例如 /odata/products?x=y

数据操作

读取数据

要读取数据,请使用 GET 请求。您还可以从 OData 功能 部分添加查询参数

GET /odata/role?$top=5

读取 ID 为 1 的用户

GET /odata/user(1)

更新数据

要更新数据,应使用 PUT 方法。然后,通过新数据填充请求体。

请求示例

PUT /odata/role(2)
{
  "name": "User role"
}

更新关系

要更新多对多关系,需要传递关联字段名称的 ID 数组

{
  "id": 2,
  "permissions": [
    5,
    6,
    7
  ]
}

使用中继更新关系

有时多对多表有额外的字段。要更新它们,传递关联字段的对象数组。

注意,字段是必需的。

 {
  "id": 2,
  "permissions": [
    {
      "id": 5,
      "author": "Larry"
    },
    {
      "id": 8,
      "author": "John"
    }
  ]
}

创建数据

要创建新记录,请使用 POST 请求类型

POST /odata/role
{
  "name": "New role"
}

删除数据

要删除数据,请使用具有记录键的 DELETE 请求

DELETE /odata/role(2)

使用自定义控制器方法

OData 插件可以自动执行几乎所有 CRUD 操作。但有些情况应单独处理。为了实现这一点,OData 插件将在路径 /app/Http/Controllers 中搜索模型控制器,文件名为 <单数实体名称>Controller.php 模式。如果找到控制器文件,第二步将在控制器类中搜索对应的方法。方法名与资源控制器相同。使用下表检查您案例的方法名

例如,您有一个 User 模型和为其创建的 UserController。但是,当您进行 odata HTTP 请求时,您使用复数名称,如 /odata/users。请注意这一点。

数据验证规则

例如,createupdate 等操作应验证来自客户端的数据。为此,使用 ValidationRulesGenerator 类。它根据数据库字段描述为 Restable 模型生成验证规则。默认情况下,它仅生成 fillable 字段的规则。

Spatie laravel permissions

如果您使用Spatie的laravel-permission,那么默认情况下Role模型和Permission模型不会使用Restable特性。要使它们成为RESTable的,您应该创建自己的模型(例如,通过php artisan make:model命令),并从\Spatie\Permission\Models\*模型扩展这些新模型。

/** Extended Role model */
namespace App\Models;

use Lexxsoft\Odata\Primitives\Restable;

class Role extends \Spatie\Permission\Models\Role
{
  use Restable;
}
/** Extended Permission model */
namespace App\Models;

use Lexxsoft\Odata\Traits\Restable;

class Permission extends \Spatie\Permission\Models\Permission
{
    use Restable;
}