【问题标题】:artisan db:seed --database not workingartisan db:seed --数据库不工作
【发布时间】:2017-03-20 12:11:02
【问题描述】:

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

现在我想将相同的数据(相同的播种机)播种到另一个正在运行的数据库中。所以我尝试使用--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-table)。

不过,这不起作用。 我在我的TestDataTableSeeder.php 中创建了一个调试行,它给出了我当前使用的 DB-Table,这是在默认连接(名为 couchbase)中使用的那个,而不是在连接“cb4test”中使用的那个。

使用 Laravel 5.4

【问题讨论】:

  • 您是否定义了与 cb4test 数据库的正确连接?
  • 是的,连接已配置并正常工作。当我在 --database 中打错字时,我会得到一个错误,所以 laravel 会在 'config/database.php' 中查找此连接是否存在,但它不会使用它。
  • 你能分享播种机类的样本吗?可能是你在播种机中定义了一个特定的数据库
  • 我用另外 4 只眼睛检查了播种机,数据库连接没有被覆盖。在播种机类中,我插入了一个调试行来打印出当前的数据库表,它指向错误。默认情况下,数据库连接是否可以更改或被覆盖?
  • 是你的默认数据库的“msg4test”名称吗?

标签: php laravel-5 couchbase


【解决方案1】:

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

因此,在您的 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 文件的这三个变量完好无损。

希望对你有帮助

【讨论】:

  • 感谢您的回答。我已经完成了所有这些事情(特别是连接),但这就是我来这里询问的地方。我不会工作,我不知道为什么它不工作。
  • 是你的默认数据库的“msg4test”名称吗?
【解决方案2】:

所以,我们发现这个问题的根源与 couchbase 驱动程序中的错误有关。

错误已修复,一切正常。

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

【讨论】:

    猜你喜欢
    • 2015-11-11
    • 2015-06-25
    • 2017-09-18
    • 1970-01-01
    • 2015-07-16
    • 2015-10-12
    • 2016-07-12
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多