为artisan migrate命令重写默认Laravel数据库配置


Overriding Default Laravel database configuration for artisan migrate commands

对于我的数据库(MySQL),我有两个用户帐户,一个(mydbuser)用于对所有表具有选择/插入/更新/删除权限的常规应用程序访问,另一个(mydbadmin)具有管理表的权限,等等

CREATE USER 'mydbadmin'@'%' IDENTIFIED BY 'ultrasecret password';
GRANT ALL ON mydb.* TO 'mydbadmin'@'%';
CREATE USER 'mydbuser'@'%' IDENTIFIED BY 'not quite so secure password';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'mydbuser'@'%';

我的Laravel应用程序被配置为使用mydbuser用户,而mydbadmin目前用于手动设置表格等。

现在,我想开始使用Artisan migrationsseeding来处理为应用程序的新实例创建数据库,但使用标准应用程序配置,migrate只能访问权限较小的帐户,因此根本无法创建/删除表。

当我运行时,有没有一种方法可以覆盖database.php中配置的数据库用户/密码

php artisan migrate:install

以及其他迁移命令?也许是一些命令行开关,允许我指定mydbadmin用户和密码?或者仅仅指向不同的数据库配置设置?

您可以使用:

php artisan migrate:install --database=seconddb

但您需要在database.php配置文件中定义此seconddb连接。当然,运行这个命令只会创建migrations表,没有其他内容,所以如果你想进行标准迁移,你需要使用:

php artisan migrate --database=seconddb

用于播种:

php artisan db:seed --database=seconddb

示例database.php文件配置:

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'maindb',
    'username'  => 'root',
    'password'  => 'pass',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),
'seconddb' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'otherdb',
    'username'  => 'user',
    'password'  => 'otherpass',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

如果您需要有关参数的其他信息,您可以始终运行--help参数,例如:

php artisan migrate:install --help
php artisan migrate --help

在设置文件中添加一个新的DB会有帮助吗?也许:

# Slightly different database connection
'mydbadmin' => array(
    'driver'    => 'mysql',
    'host'      => 'host1',
    'database'  => 'mydb',
    'username'  => 'mydbadmin',
    'password'  => 'ultrasecret password'
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

然后在CLI中指定该数据库,例如

php artisan migrate:install --database['mydbadmin']