作者 赵彬吉

update

... ... @@ -5,6 +5,7 @@ namespace App\Http\Logic\Aside;
use App\Http\Logic\Aside\User\ProjectLogic;
use App\Models\ServerConfig;
use App\Services\ProjectServer;
use Illuminate\Support\Facades\DB;
/**
... ... @@ -36,10 +37,15 @@ class ServerConfigLogic extends BaseLogic
$data['mysql_id'] = $res['id'];
}
//todo 创建数据库 初始化表
(new ProjectLogic)->save($data);
//数据库配置
$project = ProjectServer::useProject($param['project_id']);
//创建数据库
ProjectServer::createDatabase($project);
//创建表
ProjectServer::initTable($project);
DB::commit();
} catch (\Exception $e) {
DB::rollBack();
... ...
... ... @@ -78,25 +78,25 @@ class ServerConfig extends Base
/**
* @return mixed
*/
public function getUserAttribute()
public function getUserAttribute($value)
{
return decrypt($this->user);
return decrypt($value);
}
/**
* @return mixed
*/
public function getPasswordAttribute()
public function getPasswordAttribute($value)
{
return decrypt($this->password);
return decrypt($value);
}
/**
* @return mixed
*/
public function getPortAttribute()
public function getPortAttribute($value)
{
return decrypt($this->port);
return decrypt($value);
}
}
... ...
... ... @@ -28,11 +28,11 @@ class ProjectServer extends BaseService
if (empty($project))
return false;
// 设置 database.connections.custom_mysql 配置
config(['database.connections.custom_mysql.host' => $project->mysqlConfig()->host]);
config(['database.connections.custom_mysql.port' => $project->mysqlConfig()->port]);
config(['database.connections.custom_mysql.host' => $project->mysqlConfig->host]);
config(['database.connections.custom_mysql.port' => $project->mysqlConfig->port]);
config(['database.connections.custom_mysql.database' => $project->databaseName()]);
config(['database.connections.custom_mysql.username' => $project->mysqlConfig()->user]);
config(['database.connections.custom_mysql.password' => $project->mysqlConfig()->password]);
config(['database.connections.custom_mysql.username' => $project->mysqlConfig->user]);
config(['database.connections.custom_mysql.password' => $project->mysqlConfig->password]);
// 设置 redis 配置
return $project;
}
... ... @@ -40,40 +40,39 @@ class ProjectServer extends BaseService
/**
* 创建数据库
* @param $project_id
* @param $project
* @return bool
* @author zbj
* @date 2023/4/23
*/
public static function createDatabase($project_id){
$project = self::useProject($project_id);
DB::connection('custom_mysql')->statement("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}");
public static function createDatabase($project)
{
$conn = new \mysqli($project->mysqlConfig->host, $project->mysqlConfig->user, $project->mysqlConfig->password);
$conn->query("CREATE DATABASE IF NOT EXISTS {$project->databaseName()}");
return true;
}
/**
* @param $project_id
* @param $project
* @return bool
* @throws \Doctrine\DBAL\Exception
* @author zbj
* @date 2023/4/23
*/
public static function initTable($project_id){
$project = self::useProject($project_id);
public static function initTable($project)
{
$database_name = DB::connection('custom_tmp_mysql')->getDatabaseName();
$table = Schema::connection('custom_tmp_mysql')->getAllTables();
$table = array_column($table, 'Tables_in_' . $database_name);
foreach ($table as $v) {
$has_table = Schema::connection('custom_mysql')->hasTable($v);
if ($has_table)
if ($has_table) {
continue;
}
$connection = DB::connection('custom_tmp_mysql');
$sql = $connection->getDoctrineSchemaManager()
->getDatabasePlatform()
->getCreateTableSQL($connection->getDoctrineSchemaManager()->listTableDetails($v));
DB::connection('custom_mysql')->select($sql[0]);
$sql = DB::connection('custom_tmp_mysql')->select("SHOW CREATE TABLE {$v}");
DB::connection('custom_mysql')->statement(get_object_vars($sql[0])['Create Table']);
}
return true;
}
... ...