初始化-安装依赖
This commit is contained in:
209
server/plugin/saiadmin/app/logic/system/DatabaseLogic.php
Normal file
209
server/plugin/saiadmin/app/logic/system/DatabaseLogic.php
Normal file
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
// | Author: sai <1430792918@qq.com>
|
||||
// +----------------------------------------------------------------------
|
||||
namespace plugin\saiadmin\app\logic\system;
|
||||
|
||||
use plugin\saiadmin\basic\think\BaseLogic;
|
||||
use plugin\saiadmin\exception\ApiException;
|
||||
use support\think\Db;
|
||||
|
||||
/**
|
||||
* 数据表维护逻辑层
|
||||
*/
|
||||
class DatabaseLogic extends BaseLogic
|
||||
{
|
||||
/**
|
||||
* 获取数据源
|
||||
* @return array
|
||||
*/
|
||||
public function getDbSource(): array
|
||||
{
|
||||
$data = config('think-orm.connections');
|
||||
$list = [];
|
||||
foreach ($data as $k => $v) {
|
||||
$list[] = $k;
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据列表
|
||||
* @param $query
|
||||
* @return mixed
|
||||
*/
|
||||
public function getList($query): mixed
|
||||
{
|
||||
$request = request();
|
||||
$page = $request ? ($request->input('page') ?: 1) : 1;
|
||||
$limit = $request ? ($request->input('limit') ?: 10) : 10;
|
||||
|
||||
return self::getTableList($query, $page, $limit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据库表数据
|
||||
*/
|
||||
public function getTableList($query, $current_page = 1, $per_page = 10): array
|
||||
{
|
||||
if (!empty($query['source'])) {
|
||||
if (!empty($query['name'])) {
|
||||
$sql = 'show table status where name=:name ';
|
||||
$list = Db::connect($query['source'])->query($sql, ['name' => $query['name']]);
|
||||
} else {
|
||||
$list = Db::connect($query['source'])->query('show table status');
|
||||
}
|
||||
} else {
|
||||
if (!empty($query['name'])) {
|
||||
$sql = 'show table status where name=:name ';
|
||||
$list = Db::query($sql, ['name' => $query['name']]);
|
||||
} else {
|
||||
$list = Db::query('show table status');
|
||||
}
|
||||
}
|
||||
|
||||
$data = [];
|
||||
foreach ($list as $item) {
|
||||
$data[] = [
|
||||
'name' => $item['Name'],
|
||||
'engine' => $item['Engine'],
|
||||
'rows' => $item['Rows'],
|
||||
'data_free' => $item['Data_free'],
|
||||
'data_length' => $item['Data_length'],
|
||||
'index_length' => $item['Index_length'],
|
||||
'collation' => $item['Collation'],
|
||||
'create_time' => $item['Create_time'],
|
||||
'update_time' => $item['Update_time'],
|
||||
'comment' => $item['Comment'],
|
||||
];
|
||||
}
|
||||
$total = count($data);
|
||||
$last_page = ceil($total / $per_page);
|
||||
$startIndex = ($current_page - 1) * $per_page;
|
||||
$pageData = array_slice($data, $startIndex, $per_page);
|
||||
return [
|
||||
'data' => $pageData,
|
||||
'total' => $total,
|
||||
'current_page' => $current_page,
|
||||
'per_page' => $per_page,
|
||||
'last_page' => $last_page,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取列信息
|
||||
*/
|
||||
public function getColumnList($table, $source): array
|
||||
{
|
||||
$columnList = [];
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
if (!empty($source)) {
|
||||
$list = Db::connect($source)->query('SHOW FULL COLUMNS FROM `' . $table . '`');
|
||||
} else {
|
||||
$list = Db::query('SHOW FULL COLUMNS FROM `' . $table . '`');
|
||||
}
|
||||
foreach ($list as $column) {
|
||||
preg_match('/^\w+/', $column['Type'], $matches);
|
||||
$columnList[] = [
|
||||
'column_key' => $column['Key'],
|
||||
'column_name' => $column['Field'],
|
||||
'column_type' => $matches[0],
|
||||
'column_comment' => trim(preg_replace("/\([^()]*\)/", "", $column['Comment'])),
|
||||
'extra' => $column['Extra'],
|
||||
'default_value' => $column['Default'],
|
||||
'is_nullable' => $column['Null'],
|
||||
];
|
||||
}
|
||||
}
|
||||
return $columnList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 优化表
|
||||
*/
|
||||
public function optimizeTable($tables)
|
||||
{
|
||||
foreach ($tables as $table) {
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
Db::execute('OPTIMIZE TABLE `' . $table . '`');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理表碎片
|
||||
*/
|
||||
public function fragmentTable($tables)
|
||||
{
|
||||
foreach ($tables as $table) {
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
Db::execute('ANALYZE TABLE `' . $table . '`');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取回收站数据
|
||||
*/
|
||||
public function recycleData($table)
|
||||
{
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
// 查询表字段
|
||||
$sql = 'SHOW COLUMNS FROM `' . $table . '` where Field = "delete_time"';
|
||||
$columns = Db::query($sql);
|
||||
$isDeleteTime = false;
|
||||
if (count($columns) > 0) {
|
||||
$isDeleteTime = true;
|
||||
}
|
||||
if (!$isDeleteTime) {
|
||||
throw new ApiException('当前表不支持回收站功能');
|
||||
}
|
||||
// 查询软删除数据
|
||||
$request = request();
|
||||
$limit = $request ? ($request->input('limit') ?: 10) : 10;
|
||||
return Db::table($table)->whereNotNull('delete_time')
|
||||
->order('delete_time', 'desc')
|
||||
->paginate($limit)
|
||||
->toArray();
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除数据
|
||||
* @param $table
|
||||
* @param $ids
|
||||
* @return bool
|
||||
*/
|
||||
public function delete($table, $ids)
|
||||
{
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
$count = Db::table($table)->whereIn('id', $ids)->delete($ids);
|
||||
return $count > 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 恢复数据
|
||||
* @param $table
|
||||
* @param $ids
|
||||
* @return bool
|
||||
*/
|
||||
public function recovery($table, $ids)
|
||||
{
|
||||
if (preg_match("/^[a-zA-Z0-9_]+$/", $table)) {
|
||||
$count = Db::table($table)
|
||||
->where('id', 'in', $ids)
|
||||
->update(['delete_time' => null]);
|
||||
return $count > 0;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user