artisan db:seed - 数据库不工作

时间:2017-03-20 12:11:02

标签: php laravel-5 couchbase

我想将一些数据播种到我的数据库中。到目前为止,这一切都适用于" normal"数据库中。

现在我想将相同的数据(相同的播种机)播种到另一个运行的数据库。所以我尝试使用--database=命令

php artisan db:seed --database=cb4test --class=TestDataTableSeeder -v

但是这会将数据播种到"正常"数据库,而不是cb4test中指定的数据库。我做错了什么?

更多信息:

这是config/database.php的一部分:

    'connections' => [

    'couchbase' => [
        'driver'   => 'couchbase',
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 8091),
        'bucket'   => env('DB_DATABASE'),
        'username' => env('DB_USERNAME'),
        'n1ql_hosts' => [
            'http://'.env('DB_HOST', 'localhost').':8093'
        ]
    ],

    'cb4test' => [
        'driver'   => 'couchbase',
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 8091),
        'bucket'   => env('DB_TEST', 'msg4test'),
        'username' => env('DB_USERNAME'),
        'n1ql_hosts' => [
            'http://'.env('DB_HOST', 'localhost').':8093'
        ]
    ],

在我的.env中,我确实有DB_TEST的条目指向正确的couchbase-bucket(在mysql中将是一个mysql表)。

但是,这不起作用。 我在我的TestDataTableSeeder.php中创建了一个调试行,它给出了当前使用的DB-Table,这是在default-connection(名为couchbase)中使用的,而不是在连接中使用的那个&#cb4test&#39 ;

使用Laravel 5.4

2 个答案:

答案 0 :(得分:1)

它常见的误解, - 数据库指定数据库连接而不是名称。

因此,在 config \ database.php 文件中,您需要添加一个使用此不同数据库的连接,如:

'mysql2' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE2', 'forge'),
            'username' => env('DB_USERNAME2', 'forge'),
            'password' => env('DB_PASSWORD2', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => false,
            'engine' => 'InnoDB',
        ],

然后在 .env 中,为您的其他数据库定义三个变量:

DB_DATABASE2 = cb4test
DB_USERNAME2 = //username for cb4test
DB_PASSWORD2 = //password for cb4test

然后使用:

php artisan db:seed --database=mysql2 --class=TestDataTableSeeder -v

更改数据库的更好方法是在播种机本身中更改它。 在你的:TestDataTableSeeder.php

use Illuminate\Support\Facades\DB;//at top

//then inside function:
DB::disconnect('mysql');
config(['database.connections.mysql.database' => env('DB_DATABASE2','')]);
config(['database.connections.mysql.username' => env('DB_USERNAME','')]);
config(['database.connections.mysql.password' => env('DB_PASSWORD2','')]);

当然,您需要 .env 文件中的这三个变量完整无缺。

我希望它有所帮助

答案 1 :(得分:0)

因此,我们发现此问题的根源与couchbase驱动程序中的错误有关。

错误修复,一切正常。

感谢所有帮助我的答案:D