在 Yii 2.0 中,迁移 MySQL 数据库中的 A 表中的一列数据至 B 表中的一列数据,基于一条 SQL 的实现

1、参考网址:http://www.shuijingwanwq.com/2019/08/15/3427/

UPDATE `cpa_channel_app_source`, `cpa_weibo_weibo_connect_web_app_user` SET `cpa_channel_app_source`.`permission` = `cpa_weibo_weibo_connect_web_app_user`.`permission` WHERE `cpa_channel_app_source`.`id` = `cpa_weibo_weibo_connect_web_app_user`.`channel_app_source_id`;

2、更新表:channel_app_source 中的字段:permission 的值为:3,如图1

图1

3、基于数据库迁移命令,生成如上所示的一条 SQL 的实现,编辑 \console\migrations\m190815_020034_permission.php

<?php

use yii\db\Expression;
use yii\db\Migration;

/**
 * Class m190815_020034_permission
 */class m190815_020034_permission extends Migration
{
    /**
     * {@inheritdoc}
     */    public function safeUp()
    {
        $this->update('{{%channel_app_source}}, {{%weibo_weibo_connect_web_app_user}}', ['{{%channel_app_source}}.permission' => new Expression('{{%weibo_weibo_connect_web_app_user}}.permission')], ['{{%channel_app_source}}.id' => new Expression('{{%weibo_weibo_connect_web_app_user}}.channel_app_source_id')]);
    }

    /**
     * {@inheritdoc}
     */    public function safeDown()
    {
        echo "m190815_020034_permission cannot be reverted.\n";

        return false;
    }

    /*
    // Use up()/down() to run migration code without a transaction.
    public function up()
    {

    }

    public function down()
    {
        echo "m190815_020034_permission cannot be reverted.\n";

        return false;
    }
    */}

4、执行数据库迁移命令,如图2

图2

PS E:\wwwroot\channel-pub-api> ./yii migrate
Yii Migration Tool (based on Yii v2.0.15.1)

Total 1 new migration to be applied:
        m190815_020034_permission

Apply the above migration? (yes|no) [no]:yes
*** applying m190815_020034_permission
    > update {{%channel_app_source}}, {{%weibo_weibo_connect_web_app_user}} ... done (time: 0.092s)
*** applied m190815_020034_permission (time: 0.190s)


1 migration was applied.

Migrated up successfully.

5、查看表:channel_app_source 中的字段:permission 的值为:2,符合预期,如图3

图3

永夜