yii2 migrate 时直接执行 SQL语句
问题:数据库使用了 sqlite3, 然后我想创建多列主键(或者非整数主键),本身这个功能是 sqlite3 支持的,但想直接用 yii2 的 migrate 来建表就不行。(sqlite3本身不支持在建立表结构之后再用 ALT TABLE 去添加约束)
解决方法:可以先按无主键的方式去创建表,然后用 IDE提供的工具或者 sqlite3 命令行 .schema <table_name> 来查看创建表的 SQL语句,migrate/down 把这个表drop掉,然后修改 migrate/up 部分,类似如下处理
public function safeUp() { $time = $this->beginCommand("create table event_asset"); $this->db->createCommand('create table event_asset ( event_id integer not null, number integer not null, created_at timestamp default CURRENT_TIMESTAMP not null, updated_at timestamp default NULL, deleted_at timestamp default NULL, primary key (event_id, number) );')->execute(); // $this->createTable('event_asset', [ // 'event_id' => $this->integer()->notNull(), // 事件ID // 'number' => $this->integer(16)->notNull(), // 资产ID // 'created_at' => $this->timestamp()->notNull()->defaultExpression('CURRENT_TIMESTAMP'), // 'updated_at' => $this->timestamp()->null(), // 'deleted_at' => $this->timestamp()->null(), // 删除时间 用于软删除 // ]); $this->endCommand($time); $this->insert('event_asset', [ 'event_id' => 3, 'number' => 2021174803, ]); }本质上就是我们自己去接管 `$this->createTable(...)` 的功能
