Yii2迁移问题

时间:2015-07-28 11:22:35

标签: php migration yii2

我第一次使用yii2,我想尝试yii迁移。 问题: 我用

创建了迁移文件

php yii migrate/create new_table

文件已创建。然后我将新表格详细信息输入到迁移文件中。 当我跑php yii migrate时 我收到了错误

Exception 'ReflectionException' with message 'Class db does not exist'
in /var/www/yii2.uz/vendor/yiisoft/yii2/di/Container.php:415
问题是什么?

我的console/config/main.php

<?php 
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/../../common/config/main-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
    ); 
    return [
    'id' => 'app-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'console\controllers',
    'components' => [
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
    ],
    'params' => $params,
    ];

和我的迁移文件:

<?php use yii\db\Schema;
      use yii\db\Migration;

      class m150727_125205_new_table extends Migration
      {
       public function up()
      {
        $this->createTable('test',[
           'id'=> Schema::TYPE_PK,
            'name'=>  Schema::TYPE_STRING
        ]);
    }

    public function down()
    {
        echo "m150727_125205_new_table cannot be reverted.\n";

        return false;
    }

2 个答案:

答案 0 :(得分:4)

缺少控制台的数据库组件设置,将其添加到console/config/main-local.php文件以进行本地开发:

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=dbname',
        'username' => 'username',
        'password' => 'password',
        'charset' => 'utf8',
    ],
],

对于生产服务器,根据数据库设置更正此文件。

请注意-local个文件位于.gitignore列表中。

答案 1 :(得分:0)

如果您正在使用高级应用,则应在environment/dev/common/main-local.php中添加以下代码,以在您的应用中声明db组件:

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=dbname',
        'username' => 'username',
        'password' => 'password',
        'charset' => 'utf8',
    ],
],

如果要将配置实际应用于高级模板中的应用程序,则应运行./yii initphp yii init命令。

如果您使用的是基本应用程序,则应直接将其放入common/main-local.php

将它置于通用之下非常重要,而不仅仅是控制台,因为您可能会同时使用控制台和Web应用程序中的相同数据库。