callcocam/tall-tenant

支持一个或多个数据库的多租户Laravel包,适用于多租户,包含一个或多个数据库的Laravel包。

dev-main 2022-12-07 18:21 UTC

This package is auto-updated.

Last update: 2024-09-07 21:56:32 UTC


README

#TAL TENANT

#默认命令

./vendor/bin/sail artisan migrate --database=landlord --path=/database/migrations/landlord
./vendor/bin/sail artisan migrate:fresh --database=landlord --path=/database/migrations/landlord

 ./vendor/bin/sail artisan db:seed --class=LandlordSeeder

 ./vendor/bin/sail artisan db:seed --class=RoleAndPermissionsSeeder
 
 ./vendor/bin/sail artisan migrate --database=mysql
 ./vendor/bin/sail artisan migrate:fresh --database=mysql

./vendor/bin/sail artisan db:seed --class=TenantSeeder

./vendor/bin/sail artisan db:seed --class=MenusSeeder

#DOC TENANT

您可以通过调用addTenant()来让房东自动根据给定的租户进行范围,无论是从房东外观调用,还是通过注入TenantManager()实例。

您可以传递一个租户列和ID

Landlord::addTenant('tenant_id', 1);或者一个租户模型的实例

$tenant = Tenant::find(1);

Landlord::addTenant($tenant);如果传递一个模型实例,房东将使用Eloquent的getForeignKey()方法来决定租户列名。

您可以添加您需要的任意数量的租户,但是房东每次只允许一个类型的租户。

要移除租户并停止根据其进行范围,只需调用removeTenant()

Landlord::removeTenant('tenant_id');

// 或者再次传递一个模型实例: $tenant = Tenant::find(1);

Landlord::removeTenant($tenant);您还可以检查房东是否正在根据给定的租户进行范围

// 如您所期望的,$tenant可以是字符串列名或模型实例 Landlord::hasTenant($tenant);如果需要,您还可以检索房东的租户

// $tenants是Laravel集合对象,格式为'tenant_id' => 1 $tenants = Landlord::getTenants(); 设置模型以自动范围

use Illuminate\Database\Eloquent\Model; use Tall\Tenant\BelongsToTenants;

class ExampleModel extends Model { use BelongsToTenants; } 如果您希望覆盖特定模型应用的租户,可以设置$tenantColumns属性

use Illuminate\Database\Eloquent\Model; use Tall\Tenant\BelongsToTenants;

class ExampleModel extends Model { use BelongsToTenants;

public $tenantColumns = ['tenant_id'];

}} 创建新的租户范围模型

// 'tenant_id'将由Landlord自动设置 $model = ExampleModel::create(['name' => 'whatever']); 查询租户范围模型

// 这只会包括属于当前租户的模型 ExampleModel::all();

// 如果它属于错误的租户,将失败并抛出ModelNotFoundForTenantException ExampleModel::find(2); 注意:在开发多租户应用程序时,有时会感到困惑,为什么您总是收到ModelNotFound异常,因为这些行确实存在,但属于错误的租户。

Landlord会捕获这些异常,并将它们重新抛出为ModelNotFoundForTenantException,以帮助您:)

如果您需要查询所有租户,可以使用allTenants()

// 将仅为此查询包括所有租户的结果 ExampleModel::allTenants()->get();

// 将不会根据'tenant_id'进行范围,但将继续根据任何其他已设置的租户进行范围 ExampleModel::withoutGlobalScope('tenant_id')->get();