底层迁移从env抛出获取连接值表达式不允许作为字段默认值



我已经生成了很多迁移文件。如你所知,我有开发和生产数据库(甚至多个)。

在迁移文件中,您得到了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试图运行它作为一个迁移,并应用一个适当的命名空间,但否则,这应该工作。

如果需要在一个环境中使用多个数据库,则主要使用多个数据库连接。

最好使用环境变量在开发和生产中使用不同的数据库

相关内容

  • 没有找到相关文章

最新更新