niiknow / laratt
一个支持表多租户的Laravel包
Requires
- php: >=7.4
- laravel/framework: >=8.0
- league/csv: ^9.0
- maatwebsite/excel: ^3.0
- phpoffice/phpspreadsheet: ^1.29.0
- yajra/laravel-datatables-oracle: ^10.0
Requires (Dev)
- fakerphp/faker: ^1.23
- friendsofphp/php-cs-fixer: ^3.38
- mockery/mockery: ^1.6
- orchestra/testbench: ^7.4.0
- phpunit/phpunit: ^9.5
This package is not auto-updated.
Last update: 2024-09-25 21:40:04 UTC
README
通过使用表前缀允许多租户
还可以参考laratt-api,该项目最初在此构建和重构。
安装:
composer require niiknow/laratt
配置:
php artisan vendor:publish --provider="Niiknow\Laratt\LarattServiceProvider"
功能
- 使用特殊字符
$
作为租户和表分隔符。大多数数据库都允许使用此字符。 - 动态表为
tenant$table_name
- 默认情况下,租户解析使用
x-tenant
头/输入;尽管如此,可以通过为resolver
配置提供一个静态函数来自定义。 - 一个通用的Controller Trait,提供简单灵活的CRUD(创建、检索、更新、删除)REST端点。
- 简单的查询和批量删除
/query
REST端点。 - 使用laravel-datatables作为
/data
端点的jQuery DataTables。 - 为
ProfileModel
预定义结构化模式 - 为
TableModel
提供可调度和电商模式类型 - 能够包含和排除审计中的表 - 因此,当您将其用于日志记录、缓存或当客户由于某些特定原因不需要它时,您不必审计这些内容。
缺点 它不支持表关系。
API模式
以下图片来自我们的laratt-api项目的Swagger文档。
特殊的多表端点 @ /api/v1/tables/{table}
;其中{table}
是要创建的表名。{table}
必须全部小写字母、数字和下划线,长度至少为3个字符,最多为30个字符。例如,假设x-tenant: clienta
和{table} = product
,则生成的表将为clienta$product
。
请注意,有两个ID:id
和uid
。id
是laratt
内部的。您应该使用uid
进行所有操作。uid
是自动生成的GUID,如果没有在insert
期间提供。
提供uid
允许API update
有效执行merge/upsert
操作。这意味着,如果您使用uid
调用更新,如果找到记录则进行update
,否则插入新记录。
/query
端点用于查询和批量DELETE
,请参阅:查询语法/data
端点用于返回jQuery DataTables格式,使用laravel-datatables。/import
批量导入是csv,允许进行更大的导入。最多10000条记录,而不是像Azure Table Storage中的一些小数字(如100)一样。这允许更小的文件和更快的文件传输/上传。/truncate
截断表中的所有数据。/drop
删除表。为什么不呢?现在您可以对表进行各种疯狂的操作。
关于您自己的/自定义的模式?请参阅我们Profile模式的示例。
查询-语法
此库提供了简单的查询端点用于搜索和批量删除:api/v1/profile/query
或api/v1/tables/{table}/query
限制
通过关键字limit
或per_page
限制返回资源的数量
/query?limit=10
/query?limit=20
排序
按列升序或降序排序资源
/query?sort[]=column|asc
/query?sort[]=column|desc
您也可以进行多个排序查询
/query?sort[]=column1|asc&sort[]=column2|desc
筛选
筛选资源的基本格式
/query?filter[]=column:operator:value
注意: value
值使用rawurldecode()
解码。
筛选选项
您还可以使用OR
和AND
子句。对于OR
子句,在同一个filter[]
查询中使用逗号
/query?filter[]=column1:operator:value1,column2:operator:value2
对于AND
子句,使用另一个filter[]
查询。
/query?filter[]=column1:operator:value1&filter[]=column2:operator:value2
RequestQueryBuilder服务器端使用
以下示例服务器端DonationController,为某些客户端UI提供Laravel分页json数据。
<?php namespace App\Http\Controllers\Api\V1; use App\Http\Controllers\Controller; use App\Models; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Niiknow\Laratt\RequestQueryBuilder; class DonationController extends Controller { /** * Method return donor transaction history * * @param Request $request */ public function index(Request $request) { $user = \Auth::user(); $query = \App\Models\Donation::select( [ 'donations.id', 'donations.amount', 'donations.recurrence_period', 'donations.created_at', 'donations.txn_id', 'donations.txn_type', 'projects.name as name' ] )->Where('donor_id', $user->id) ->leftJoin('projects', 'donations.project_id', '=', 'projects.id'); $qb = new RequestQueryBuilder($query); return $qb->applyRequest($request); } }
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。