getTable(); // 获取对应表字段 $fields = $query->getConnection()->getTableInfo($table, 'fields'); // 判断是否存在 tenant_id 字段 $hasTenantId = in_array('tenant_id', $fields); //去除表前缀 $tableNoPrefix = str_replace(env('database.prefix', 'la_'), '', $table); // 来自租户端或者用户端,平台端查询租户就需要进行全局租户信息替换 if ($tenantId || ($hasTenantId && isset(\request()->tenantId))) { if(!$tenantId){ $tenantId = \request()->tenantId; } // 分表全局控制 if (!in_array($tableNoPrefix, self::$notCheckTables)) { // 根据租户唯一标识获取对应表是否存在 $tenantInfo = Tenant::query()->where('id', $tenantId)->find()->toArray(); // 租户分表策略 if ($tenantInfo['tactics'] == 1) { $table = $table . '_' . $tenantInfo['sn']; //判断对应表是否存在 $newQuery = $query->getConnection()->getTableInfo($table); if ($newQuery) { // 分表存在 $query->table($table); } else { // 表不存在 echo "表 " . $table . " 不存在"; } } } // 判断是否存在 tenant_id 字段 if ($hasTenantId) { self::$hasTenantId = true; $query->where($table . '.tenant_id', $tenantId); } } } /** * @notes 插入语句前置处理 * @param $model * @return void * @author JXDN * @date 2024/09/04 15:48 */ public static function onBeforeInsert($model): void { $tenantId = self::checkTenant() ?: self::checkUser(); if ($tenantId) { if (self::$hasTenantId) { $model->tenant_id = $tenantId; } } } /** * @notes 更新语句前置处理 * @param $model * @return void * @author JXDN * @date 2024/09/04 15:48 */ public static function onBeforeUpdate($model): void { $tenantId = self::checkTenant() ?: self::checkUser(); if ($tenantId) { if (self::$hasTenantId) { $model->tenant_id = $tenantId; } } } /** * @notes 判断是否为租户端 * @return false|mixed|void * @author JXDN * @date 2024/09/04 16:01 */ private static function checkTenant() { $token = Request::header('token'); if (AdminTerminalEnum::isTenant() && $token !== "null") { $tenant_id = \request()->tenantId; if ($tenant_id) { return $tenant_id; } else { return false; } } else { return false; } } /** * @notes 判断是否为用户端 * @return false|mixed|void * @author JXDN * @date 2024/09/04 16:01 */ private static function checkUser() { if (AdminTerminalEnum::isUser()) { $tenant_id = \request()->tenantId; if ($tenant_id) { return $tenant_id; } else { return false; } } else { return false; } } }