问题数据库使用了 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(...) 的功能