我使用 Yii2 控制台应用程序来运行迁移。这是一个非常基本的应用程序,它是这样的(项目的/文件夹中的 yii.php):
<?php
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
$config = require __DIR__ . '/config/console.php';
(new yii\console\Application($config))->run();
?>
所以当我跑
php yii.php
一切都很好,但是当我运行时
php yii.php migrate/create create_user_table
我收到一条错误消息:
Error: Failed to instantiate component or class "db".
我的 Yii 是 v2.0.15.1
更新 19:32 30/12/2018
当我将 db 配置添加到 config/console.php 时,如下所示:
return [
'id' => 'school-console',
'basePath' => dirname(__DIR__),
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=school',
'username' => 'root',
'password' => 'Taras1love',
'charset' => 'utf8',
]
];
我明白了:
Error: Setting read-only property: yii\console\Application::db
最佳答案
您缺少控制台应用程序的数据库组件配置,您需要在 config/console.php
中添加以下内容文件。当您使用 basic-app
对于 Yii2,你必须有一个 db.php
包含数据库配置的文件,您需要像下面一样包含它
//this goes on the top of your `console.php` file
$db = require __DIR__ . '/db.php',
return [
'id' => 'myapp-console',
'basePath' => dirname(__DIR__)
//add the db component
'components' => [
'db' => $db,
]
];
您的
db.php
应该像下面的 config
文件夹,更改 username
的值, password
和 dbname
.<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=YOUR_DB_NAME',
'username' => 'DB_USER',
'password' => 'DB_PASS',
'charset' => 'utf8',
];
或者您可以在
config/console.php
中分配它如果您不想创建单独的文件return [
'id' => 'myapp-console',
'basePath' => dirname(__DIR__)
//add the db component
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=YOUR_DB_NAME',
'username' => 'DB_USER',
'password' => 'DB_PASS',
'charset' => 'utf8',
]
]
];
关于Yii2 无法实例化组件或类 "db",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978005/