摘要:事務性的遷移整體遷移或回滾執行復雜的遷移時,通常想確定每個完整遷移全體是成功了還是失敗了,以便數據庫保持一致和完整。在創建數據表的過程中可以同時聲稱多張表,刪除多張表。相關資料數據庫遷移之數據庫遷移
前言
Yii2 migrate 數據庫遷移要我用一個詞形容的話,“雞助”最適合不過了,食之無味,棄之可惜。Yii2 migrate能完成的操作,手工會更快,數據表結構變化也不能保存源表的數據,但是對于一些修改和建表操作在團隊協作中還是挺方便的,數據庫管理者只需要執行yii migrate的命令就能操作表,追蹤數據庫遷移的歷史,應用新的遷移版本,或恢復之前的遷移版本。但凡有優劣,可當優勢大于劣勢的時候,我們會更多的去考慮如何落地的問題。
建立遷移1、建立新的遷移請運行以下命令:
./yii migrate/create plan_admin //plan_admin 遷移建立名為plan_admin的新表
2、運行結果,生成文件及文件名看下圖:
3、打開m170108_055206_plan_admin.php即可看到
注釋:當執行./yii migrate/create plan_admin命令遇到如下問題:"The configuration for the "user" component must contain a "class" element." 或者"The configuration for the "session" component must contain a "class" element."。
解決辦法:
創建數據表
首先說一下問題的根源,是你的配置文件(main.php)配置user或者session的時候缺少了class類了,加上即可。 user類:"class" => yiiwebUser,session類:"class" => "yiiwebSession",注意這里的類必須是yiiweb下的,不能自定義,否則錯誤問題沒法解決。參考網址public function up() { $tableOptions = null; if ($this->db->driverName === "mysql") { $tableOptions = "CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE=InnoDB COMMENT="計劃管理表""; } //一開始沒有PlanAdmin models類可將PlanAdmin::tableName()用"{{plan_admin}}"替換。 $this->createTable(PlanAdmin::tableName(), [ "id" => $this->primaryKey(), "titile" => $this->string(100)->notNull()->comment("計劃標題"), "module" => $this->integer()->defaultValue(0)->comment("模塊"), "status" => $this->integer()->defaultValue(0)->comment("狀態"), "plan_content" => $this->text()->comment("計劃內容"), "supervisor" => $this->string(100)->comment("督導人"), "end_time" => $this->integer()->comment("完成時間"), "daily_maxim" => $this->text()->comment("每日格言"), "daily_summary" => $this->text()->comment("每日總結"), "company_id" => $this->integer()->comment("公司id"), "created_time" => $this->integer()->comment("添加時間"), "update_time" => $this->integer()->comment("修改時間"), ], $tableOptions); }添加字段public function up() { //添加字段 $this->addColumn(PlanAdmin::tableName(), "user_id", "INT(11) DEFAULT 0 COMMENT "計劃人" AFTER `titile`"); // $this->addColumn(PlanAdmin::tableName(), "company_id", "INT(10) NOT NULL COMMENT "公司id" AFTER `daily_summary`"); }修改字段public function up() { $this->alterColumn(PlanAdmin::tableName(), "end_time", "string(150) COMMENT "完成時間""); }增加索引public function up() { $this->createIndex("module", PlanAdmin::tableName(), ["module"],true); }刪除某字段public function down() { $this->dropColumn(PlanAdmin::tableName(), "update_time"); }刪除某表public function down() { $this->dropTable(PlanAdmin::tableName()); }添加主鍵public function up() { $this->addForeignKey("contract_id" , "{{service_plan}}" , "contract_id" , "{{contract}}" , "id" , "CASCADE" , "RESTRICT"); } addForeignKey()方法的參數注釋: 參數1:設置本表的外鍵名(可自定義)。 參數2:本表表名。 參數3:本表中與外表關聯的字段名稱。如果有多個字段,以逗號分隔或使用一個數組。 參數4:外表表名。 參數5:外表中與本表關聯的字段名稱。如果有多個字段,以逗號分隔或使用一個數組。 參數6:刪除選項,可選,默認為空。可選的類型有 RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL。 參數7:更新選項,可選,默認為空。可選的類型有 RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL。 注意:參數3和參數5的字段類型必須一致,否則執行失敗。事務性的遷移(整體遷移或回滾)執行復雜的 DB 遷移時,通常想確定每個完整遷移全體是成功了還是失敗了,以便數據庫保持一致和完整。為實現該目標,可以利用數據庫事務來處理,使用專用的 safeUp 和 safeDown 方法來達到這些目的。參考文檔
常用命令./yii migrate 默認執行 ./yii migrate/up
./yii migrate/down 執行某些撤銷對表的操作
./yii migrate/redo (指定了重做多少遷移,默認為 1) 重做遷移 就是首先回退然后應用指定的遷移
./yii migratre/to (遷移文件名)執行某個指定的遷移文件
./yii migrate/history (遷移數量,不指定將顯示所有) 顯示被應用的所有遷移
./yii migrate/new (遷移數量,不指定將顯示所有) 顯示沒有被應用的所有新遷移。在創建數據表的過程中可以同時聲稱多張表,刪除多張表。
執行過的遷移文件,會在數據庫的migration中生成一條記錄,記錄此遷移文件已經執行過,下次將執行數據表中不存在的遷移文件。意思就是說文件執行過了,想要再次執行的話,得把文件名改一下。
如下是所有這些數據庫訪問方法的列表:
yiidbMigration::execute(): 執行一條 SQL 語句 yiidbMigration::insert(): 插入單行數據 yiidbMigration::batchInsert(): 插入多行數據 yiidbMigration::update(): 更新數據 yiidbMigration::delete(): 刪除數據 yiidbMigration::createTable(): 創建表 yiidbMigration::renameTable(): 重命名表名 yiidbMigration::dropTable(): 刪除一張表 yiidbMigration::truncateTable(): 清空表中的所有數據 yiidbMigration::addColumn(): 加一個字段 yiidbMigration::renameColumn(): 重命名字段名稱 yiidbMigration::dropColumn(): 刪除一個字段 yiidbMigration::alterColumn(): 修改字段 yiidbMigration::addPrimaryKey(): 添加一個主鍵 yiidbMigration::dropPrimaryKey(): 刪除一個主鍵 yiidbMigration::addForeignKey(): 添加一個外鍵 yiidbMigration::dropForeignKey(): 刪除一個外鍵 yiidbMigration::createIndex(): 創建一個索引 yiidbMigration::dropIndex(): 刪除一個索引注意事項以上是XFtp上操作記錄,如果是本地的話運行時把yii前面的“./”去掉。注意要在項目的根目錄運行命令。
相關資料Yii2 migrate 數據庫遷移
Yii2之數據庫遷移(Migrate)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/22281.html
摘要:為了演示特性的基本使用,我將會帶領大家構建一個簡單的博客管理系統。目前為止,我們借助生成了一系列操作。有好提示實際開發中,后臺管理理應利用協助開發,可快速提高開發效果。 作者:白狼 出處:http://www.manks.top/document/easy_blog_manage_system.html 本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出...
摘要:最近在做認證功能,記錄整個過程,方便以后查看。請求參數當作請求參數發送,例如,由于大多數服務器都會保存請求參數到日志,這種方式應主要用于請求,因為它不能使用頭來發送使用者從認證服務器上獲取基于協議的,然后通過發送到服務器。 最近在做RESTful API認證功能,記錄整個過程,方便以后查看。本文參照了 https://segmentfault.com/a/119000001636860...
閱讀 3391·2023-04-25 14:07
閱讀 3458·2021-09-28 09:35
閱讀 2091·2019-08-30 15:55
閱讀 1405·2019-08-30 13:48
閱讀 2502·2019-08-30 13:16
閱讀 3202·2019-08-30 12:54
閱讀 3238·2019-08-30 11:19
閱讀 1876·2019-08-29 17:17