在 Yii2 中执行数据库迁移时报错:Exception ‘yii\di\NotInstantiableException’ with message ‘Failed to instantiate component or class “m220810_154914_create_table_access_tokens”.’
1、在 Yii2 中执行数据库迁移时报错:Exception ‘yii\di\NotInstantiableException’ with message ‘Failed to instantiate component or class “m220810_154914_create_table_access_tokens”.’。如图1
PS C:\wwwroot\object\src> ./yii migrate Yii Migration Tool (based on Yii v2.0.49.4) Total 1 new migration to be applied: m220810_154914_create_table_access_tokens Apply the above migration? (yes|no) [no]:yes *** applying m220810_154914_create_table_access_tokens Exception 'yii\di\NotInstantiableException' with message 'Failed to instantiate component or class "m220810_154914_create_table_access_tokens".' in C:\wwwroot\object\src\vendor\yiisoft\yii2\di\Container.php:509 Caused by: Exception 'ReflectionException' with message 'Class m220810_154914_create_table_access_tokens does not exist' in C:\wwwroot\object\src\vendor\yiisoft\yii2\di\Container.php:507 Stack trace: #0 C:\wwwroot\object\src\vendor\yiisoft\yii2\di\Container.php(507): ReflectionClass->__construct('m220810_154914_...') #1 C:\wwwroot\object\src\vendor\yiisoft\yii2\di\Container.php(385): yii\di\Container->getDependencies('m220810_154914_...') #2 C:\wwwroot\object\src\vendor\yiisoft\yii2\di\Container.php(170): yii\di\Container->build('m220810_154914_...', Array, Array) #3 C:\wwwroot\object\src\vendor\yiisoft\yii2\BaseYii.php(365): yii\di\Container->get('m220810_154914_...', Array, Array) #4 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\controllers\MigrateController.php(202): yii\BaseYii::createObject(Array) #5 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(757): yii\console\controllers\MigrateController->createMigration('m220810_154914_...') #6 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\controllers\BaseMigrateController.php(216): yii\console\controllers\BaseMigrateController->migrateUp('m220810_154914_...') #7 [internal function]: yii\console\controllers\BaseMigrateController->actionUp(0) #8 C:\wwwroot\object\src\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array) #9 C:\wwwroot\object\src\vendor\yiisoft\yii2\base\Controller.php(178): yii\base\InlineAction->runWithParams(Array) #10 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\Controller.php(180): yii\base\Controller->runAction('', Array) #11 C:\wwwroot\object\src\vendor\yiisoft\yii2\base\Module.php(552): yii\console\Controller->runAction('', Array) #12 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\Application.php(180): yii\base\Module->runAction('migrate', Array) #13 C:\wwwroot\object\src\vendor\yiisoft\yii2\console\Application.php(147): yii\console\Application->runAction('migrate', Array) #14 C:\wwwroot\object\src\vendor\yiisoft\yii2\base\Application.php(384): yii\console\Application->handleRequest(Object(yii\console\Request)) #15 C:\wwwroot\object\src\yii(23): yii\base\Application->run() #16 {main}
2、这个迁移文件是从别的项目中复制过来的。文件内容如下
<?php namespace console\migrations; use yii\db\Migration; /** * Class m220810_154914_create_table_access_tokens */ class m220810_154914_create_table_access_tokens extends Migration { /** * {@inheritdoc} */ public function safeUp() { $this->createTable('access_tokens', [ 'id' => $this->string(20), 'user_id' => $this->string(20), 'access_token' => $this->string(200)->unique(), 'ip' => $this->string(128)->defaultValue(''), 'created_at' => $this->dateTime(), 'updated_at' => $this->dateTime(), ], 'row_format=DYNAMIC'); $this->addPrimaryKey('pk-id', 'access_tokens', 'id'); $this->createIndex('idx-uid', 'access_tokens', 'user_id'); } /** * {@inheritdoc} */ public function safeDown() { echo "m220810_154914_create_table_access_tokens cannot be reverted.\n"; return false; } /* // Use up()/down() to run migration code without a transaction. public function up() { } public function down() { echo "m220810_154914_create_table_access_tokens cannot be reverted.\n"; return false; } */ }
3、暂时没有找到具体的原因,决定新建一个迁移文件,然后复制文件中的迁移实现。执行命令:./yii migrate/create create_access_tokens_table。执行迁移,未报错。后续才找到原因,删除掉 namespace console\migrations; 后就可以正常执行迁移。
PS C:\wwwroot\object\src> ./yii migrate/create create_access_tokens_table Yii Migration Tool (based on Yii v2.0.49.4) Create new migration 'C:\wwwroot\object\src\console/migrations\m250515_031604_create_access_tokens_table.php'? (yes|no) [no]:yes New migration created successfully. PS C:\wwwroot\object\src> ./yii migrate Yii Migration Tool (based on Yii v2.0.49.4) Total 1 new migration to be applied: m250515_031604_create_access_tokens_table Apply the above migration? (yes|no) [no]:yes *** applying m250515_031604_create_access_tokens_table > create table access_tokens ... done (time: 0.028s) > add primary key pk-id on access_tokens (id) ... done (time: 0.044s) > create index idx-uid on access_tokens (user_id) ... done (time: 0.038s) *** applied m250515_031604_create_access_tokens_table (time: 0.122s) 1 migration was applied. Migrated up successfully.
近期评论