0

我是 yii 的新手,在执行迁移文件时发现了一个问题。以下是迁移代码(抱歉,字段名称是印度尼西亚语:

public function safeUp()
{
    $this->execute("
        ALTER TABLE `t_retur_pembelian` ALTER `kode_pembelian` DROP DEFAULT;
        ALTER TABLE `t_retur_pembelian` CHANGE COLUMN `kode_pembelian` `kode_post_pembelian` VARCHAR(16) NOT NULL AFTER `kode`, DROP FOREIGN KEY `FK_T_PEMBELIAN_T_RETUR_PEMBELIAN`, ADD CONSTRAINT `FK_t_retur_pembelian_t_post_pembelian` FOREIGN KEY (`kode_post_pembelian`) REFERENCES `t_post_pembelian` (`kode`) ON UPDATE NO ACTION ON DELETE NO ACTION;
    ");
}

public function safeDown()
{
    return false;
}

每次我尝试执行此迁移时,它总是失败并出现错误:

...Exception: CDbCommand failed to execute the SQL statement: SQLSTATE[42000] [1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ALTER TABLE `t_retur_pembelian` CHANGE COLUMN `kode_pembelian` `kode_post_pembel' at line 2. The SQL statement executed was: ALTER TABLE `t_retur_pembelian` ALTER `kode_pembelian` DROP DEFAULT;

但是当我在mysql中执行这两行sql查询时,它运行成功。迁移文件有什么问题?有谁能够帮我?我很感激。

4

1 回答 1

1

尝试:

$this->execute("ALTER TABLE `t_retur_pembelian` ALTER `kode_pembelian` DROP DEFAULT");
$this->renameColumn('t_retur_pembelian', 'kode_pembelian', 'kode_post_pembelian VARCHAR(16) NOT NULL AFTER `kode`');
$this->dropForeignKey('FK_T_PEMBELIAN_T_RETUR_PEMBELIAN', 't_retur_pembelian');
$this->addForeignKey('FK_t_retur_pembelian_t_post_pembelian', 't_retur_pembelian', 'kode_post_pembelian', 't_post_pembelian', 'kode', 'NO ACTION', 'NO ACTION');

我不知道您的 sql 有什么问题,也许在一次执行中必须执行一项操作,但我的代码必须有效。不要忘记return true;

于 2013-11-01T14:24:53.783 回答