helmut-kleinhans/yii2-dbtools

Yii2 数据库备份和恢复功能

安装: 572

依赖项: 0

建议者: 0

安全: 0

星标: 1

观察者: 1

分支: 0

开放问题: 0

语言:JavaScript

类型:yii2-extension

dev-master 2018-12-10 12:24 UTC

This package is not auto-updated.

Last update: 2024-09-25 12:57:59 UTC


README

##检查和同步数据库结构与文件系统和子版本

数据库备份和恢复功能

安装

安装此扩展的首选方式是通过 composer

运行以下命令之一

php composer.phar require --prefer-dist helmut-kleinhans/yii2-dbtools "*"

"helmut-kleinhans/yii2-dbtools": "*"

将以下内容添加到您的 composer.json 文件的 require 部分。

用法

安装扩展后,只需在您的配置中添加即可

基本 config/web.php

高级 [backend|frontend|common]/config/main.php

    'modules'    => [
        'dbtools' => [
            'class' => 'DbTools\DbToolsModule',
            //'checkDefiner' => 'root@%',       //used for manage tool to show warning if definer of procedure, 
                                                //function or trigger definer doesnt match
            //'exportDelimiter' => '$$',        //delimiter which will be used for export of Procedures,Functions 
                                                //and Triggers
            //'xmlValues' => '@app/values.xml', //input file for constants and error values
            /*
            //define behaviors for the manage controller
            'behaviorsManage' =>
                [
                'access' => [
                    'class' => \yii\filters\AccessControl::className(),
                    'rules' => [
                        [
                            'allow' => true,
                            'matchCallback' => function ($rule, $action) {
                                return \backend\models\User::checkRoutePermission($action->id,$action->controller->id,$action->controller->module->id);
                            }
                        ],
                    ],
                ],
            ],
            */
        ],
        ...
    ],
    'aliases'    => [
        '@DbToolsExport' => '@app/dbtools',     //folder to save exported and autogenerated files
        ...
    ],

用法

管理

美观的 URL /dbtools/manage

非美观的 URL index.php?r=dbtools/manage

DbTool 接口读取您的数据库并进行一些检查。

###表格 可以保存到文件系统中,但需要手动恢复。

  • 警告
    • 您可以通过将表列注释设置为 "Warning: xxxxx" 来添加警告

###过程 + 函数 + 触发器 可以保存到文件系统中,也可以恢复。

  • 简短部分(见 简短
  • 警告
    • 检查-警告
      • 如果安全类型不是 INVOKER
      • 如果定义者不是在配置中设置的定义者(modules=>dbtools=>checkDefiner)
      • 如果 DECLARE 不以 "m_" 开头(DECLARE m_MyVar INT DEFAULT 0 ;)
      • 如果 DECLARE 已知的错误与错误值 / 错误类型不匹配
      • 如果 DECLARE 已知的常量与错误值 / 错误类型不匹配
      • 如果 DECLARE 以 cConst 或 cError 开头但未在 values.xml 中设置

###视图 可以保存到文件系统中,但需要手动恢复。

###事件 可以保存到文件系统中,但需要手动恢复。

简短

简短部分应位于过程/函数/触发器的顶部

CREATE DEFINER=`root`@`%` PROCEDURE `myproc`(
               IN  inVar  INT UNSIGNED,
               OUT outVar BIGINT,
           )
       BEGIN
           /**
           @brief description of myproc
           @param  inVar      description of param1
           @param  outVar     description of param2
           */
           
           DECLARE  ...
  • @brief
    • 此项目的描述
  • @param [ParameterName]
    • 给定参数的描述
  • @return
    • 函数返回值的描述
  • @warning [Warning Message Text]
    • 向管理界面添加警告
  • @note [Note Text]
    • 向管理界面添加注释
  • @deprecated
    • 用于将项目标记为已弃用并添加警告
  • @todo [Todo Text]
    • 向管理界面添加待办事项
  • @export
    • 将项目标记为自动生成(见 自动生成
  • @select Name
    • 对于您的过程或子过程输出的每个选择,您必须添加一个 "@select Name"。名称用于自动生成的类在 PHP 中接收结果(见 自动生成)(注意:@export 将设置为 true)

自动生成

美观的 URL /dbtools/manage/autogen

非美观的 URL index.php?r=dbtools/manage/autogen

自动生成工具用于将输入 xml(见 values.xml)和 Db 过程/函数(见 管理)转换为 PHP 文件。

自动生成的值

您可以在扩展文件夹中找到 example.xml

values_example.xml

请将文件复制到您的 Web 文件夹,并在您的配置中设置路径(modules->dbtools->xmlValues)

此文件用于生成一个 PHP 文件,其中包含用户定义的常量、错误代码以及从数据库导出的值。

生成的文件的保存位置可以在配置中设置(aliases->@DbToolsExport)。最终路径将是

@DbToolsExport/dbvalues/DbValues.php

示例

<cat name="CatName1">
    <cat name="CatName2">
        <enum value="100">
            <error name="error1">Error Message1</error>
            <error name="error2">Error Message2</error>
        </enum>
    </cat>
</cat>
<cat name="CatName3">
    <const name="const1" type="INT" value="1"/>
    <const name="const2" type="UNSIGNED INT" value="2"/>
    
    <sql name="dbvalues" db="db" table="tablename" colname="col4name" colvalue="col4value"/>

    <sqlenum name="dbenums" db="db" table="tablename" colenum="col4enum"/>
</cat>

将导致

<?php
namespace DbToolsExport\dbvalues;

class DbValues
{
    //CatName1_CatName2
    const eError_CatName1_CatName2_error1 = 100;
    const eError_CatName1_CatName2_error2 = 101;
    //CatName3_dbvalues
    const cConst_CatName3_dbvalues_value1 = 1;                                     //value 1
    const cConst_CatName3_dbvalues_value2 = 2;                                     //value 2
    //CatName3_dbenums
    const cConst_CatName3_dbenums_enum1 = 'enum_1';
    const cConst_CatName3_dbenums_enum2 = 'enum_2';
    const cConst_CatName3_dbenums_enum3 = 'enum_3';
    //CatName3
    const cConst_CatName3_const1 = 1;
    const cConst_CatName3_const2 = 2;

    const ErrorMessages = [
            //CatName1_CatName2
            self::eError_CatName1_CatName2_error1 => 'Error Message1',
            self::eError_CatName1_CatName2_error2 => 'Error Message2',
            //CatName3_dbvalues
            //CatName3_dbenums
            //CatName3
    ];

    const DbTypes = [
            'cConst_CatName3_dbvalues_value1' => 'TINYINT UNSIGNED',
            'cConst_CatName3_dbvalues_value2' => 'TINYINT UNSIGNED',
            'cConst_CatName3_dbenums_enum1' => 'CHAR(7)',
            'cConst_CatName3_dbenums_enum2' => 'CHAR(7)',
            'cConst_CatName3_dbenums_enum3' => 'CHAR(7)',
            'cConst_CatName3_const1' => 'INT',
            'cConst_CatName3_const2' => 'UNSIGNED INT',
    ];

    const Keys = [
        'error'=>[
            'eError_CatName1_CatName2_error1',
            'eError_CatName1_CatName2_error2',
        ],
        'const'=>[
            'cConst_CatName3_dbvalues_value1',
            'cConst_CatName3_dbvalues_value2',
            'cConst_CatName3_dbenums_enum1',
            'cConst_CatName3_dbenums_enum2',
            'cConst_CatName3_dbenums_enum3',
            'cConst_CatName3_const1',
            'cConst_CatName3_const2',
        ],];

    public static function MessageByCode($errorcode)
    {
        if (!array_key_exists($errorcode, static::ErrorMessages))
        {
            return 'Unknown errorcode: ' . $errorcode;
        }

        return static::ErrorMessages[$errorcode];
    }
    
}
/*
DECLARE eError_CatName1_CatName2_error1 SMALLINT UNSIGNED DEFAULT 100;
DECLARE eError_CatName1_CatName2_error2 SMALLINT UNSIGNED DEFAULT 101;
DECLARE cConst_CatName3_dbvalues_value1 TINYINT UNSIGNED DEFAULT 2;
DECLARE cConst_CatName3_dbvalues_value2 TINYINT UNSIGNED DEFAULT 1;
DECLARE cConst_CatName3_dbenums_enum1 CHAR(7) DEFAULT 'enum_1';
DECLARE cConst_CatName3_dbenums_enum2 CHAR(7) DEFAULT 'enum_2';
DECLARE cConst_CatName3_dbenums_enum3 CHAR(7) DEFAULT 'enum_3';
DECLARE cConst_CatName3_const1 INT DEFAULT 1;
DECLARE cConst_CatName3_const2 UNSIGNED INT DEFAULT 2;

*/

标签

类别

用于分组元素。

<cat name="CatName1" type="INT UNSIGNED">
  • 名称
    • 名称放置在子名称之前。
  • 类型
    • [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型并将其传递给所有子项,或者在每个子项中单独放置。
枚举

用于自动设置子元素的值,并在每个子元素之后递增。

<enum value="100">
    • 每个子元素后值增加 1。
  • 类型
    • [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型并将其传递给所有子项,或者在每个子项中单独放置。
错误

错误代码应在数据库过程、函数和触发器内部用作异常,并且可以通过自动生成的类接收。(见 管理自动生成

<error name="error1">Error Message1</error>
  • 名称
    • 名称用于该错误
    • 需要有一个值或从
  • 文本
    • 文本用作数据库异常的默认错误消息。在数据库中抛出错误时,您可以设置自定义消息。
常量

应在 PHP 或数据库中中使用。(见 管理

<const name="const2" type="UNSIGNED INT" value="2"/>
  • 名称
    • 名称用于该常量
    • 需要有一个值或从获取值或设置为 "位"
    • 用于生成位值。您可以从 1 开始指定应设置的位。
    • 示例:设置位 0x0001b、0x0100b、0x1000b => bit="1,3,4" => 13 十进制
  • 类型
    • [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型或从获取它
SQL

用于将数据库表的内容转换为可用的 PHP 常量。

<sql name="dbvalues" db="db" table="tablename" colname="col4name" colvalue="col4value"/>
  • 名称
    • 名称放置在子名称之前。
  • db
    • yiis 数据库连接标识符,在 yii config.xml -table 中使用
    • 应转换的表 -colname
    • 用于变量名称的列(注意:所有不符合 "a-zA-Z0-9_" 的字符都会被移除,并且每个下划线后的首字母和字母将大写) -colvalue
    • 用于变量值的列
SQL 枚举

用于将数据库列枚举转换为可用的 PHP 常量。

<sqlenum name="dbenums" db="db" table="tablename" colenum="col4enum"/>        
  • 名称
    • 名称放置在子名称之前。 -table
    • 应转换的表 -colenum
    • 用于变量名称和值的列(对于名称:所有不符合 "a-zA-Z0-9_" 的字符都会被移除,并且每个下划线后的首字母和字母将大写)

用法

要使用自动生成的文件,您需要包括

use DbToolsExport\dbvalues\DbValues;

并通过

$error = DbValues::eError_CatName1_CatName2_error1;

自动生成的类

此文件用于生成一个 PHP 文件,其中包含数据库过程或函数调用,包括抛出的错误异常。此外,它还添加了 OUT 参数的类成员,这些参数将被自动填充。过程可以有选择结果集 /see Brief/select。函数有一个返回值函数

要标记过程或函数以导出,请参阅 Brief/export

生成的文件保存位置可以在配置中设置(别名-> @DbToolsExport)。最终路径将是

@DbToolsExport/dbclasses/{db}/dbProc{procedurename}.php
@DbToolsExport/dbclasses/{db}/dbFunc{functionname}.php
  • db
    • 配置中定义的数据库连接密钥
  • procedurename
    • 过程名称
  • functionname
    • 函数名称

用法

要使用自动生成的类,您需要包括

use DbToolsExport\dbclasses\db\dbFuncMyFunc;
//optional to receive exceptions
use DbTools\db\DbException;                                     

并执行它

$q = new dbFuncMyFunc('v1');
try
{
    $q->execute();
}
catch (DbException $e)
{
    echo 'ERROR ('.$e->getCode().'): '.$e->getMessage();
}

echo $q->getResult();