我使用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
UPD 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
答案 0 :(得分:1)
您缺少控制台应用程序的数据库组件配置,需要在config/console.php
文件内添加以下内容。当您使用Yii2的basic-app
时,您必须具有数据库配置的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',
]
]
];
答案 1 :(得分:0)
我发现如果我直接从供应商/ bin处运行yii,则会遇到此问题。 如果我进入控制台目录并使用./yii从那里运行它,则不会出现此错误,并且能够创建迁移。
换句话说:
cd <project-root>/vendor/bin
yii migrate/create xxx
没用
但是:
cd <project-root>/console
./yii migrate/create xxx
工作
答案 2 :(得分:0)
发生这种情况是因为我不小心重命名了迁移文件,但它与文件名不匹配