callcocam / tall-tenant
支持一个或多个数据库的多租户Laravel包,适用于多租户,包含一个或多个数据库的Laravel包。
Requires
- php: ^7.3|^8.0
- callcocam/tall-sluggable: dev-main
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();