niiknow/laratt

一个支持表多租户的Laravel包

2.2.0 2023-11-08 17:18 UTC

README

通过使用表前缀允许多租户

Build StatusSoftware License

还可以参考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:iduididlaratt内部的。您应该使用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/queryapi/v1/tables/{table}/query

限制

通过关键字limitper_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()解码。

筛选选项

您还可以使用ORAND子句。对于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)。有关更多信息,请参阅许可证文件