我已经生成了很多迁移文件。如你所知,我有开发和生产数据库(甚至多个)。
在迁移文件中,您得到了protected $connection
定义
<?php
//...
return new class extends Migration
{
/**
* The database connection that should be used by the migration.
*
* @var string
*/
protected $connection = 'dev_conn';
当我想"动态"更改连接时,问题就来了。或者更有效地:
<?php
//...
return new class extends Migration
{
/**
* The database connection that should be used by the migration.
*
* @var string
*/
protected $connection = env('DB_CONNECTION');
但是我得到以下错误:
表达式不允许作为字段默认值
然后,把所有的文件一个接一个地改成:
<?php
//...
return new class extends Migration
{
/**
* The database connection that should be used by the migration.
*
* @var string
*/
protected $connection = 'prod_conn';
那么我如何在一行代码中更改连接名称,而不是更改每个文件?
class CustomMigration extends Migration {
protected $connection = null;
public function __construct() {
$this->connection = env('DB_CONNECTION');
}
}
你不能像在任何PHP文件中那样设置一个函数的本地属性,但是你应该能够在__construct()
方法中设置它。
你只需要确保任何"动态"迁移扩展这个类,而不是默认的:
class CreateExampleTable extends CustomMigration {
// ...
}
你可能需要把这个CustomMigration
类放在一个不同的文件夹,以防止Laravel试图运行它作为一个迁移,并应用一个适当的命名空间,但否则,这应该工作。
如果需要在一个环境中使用多个数据库,则主要使用多个数据库连接。
最好使用环境变量在开发和生产中使用不同的数据库