Я выполняю рефакторинг старой базы данных и хочу быстро запросить / изменить таблицу в разных базах данных.
Например, у меня есть 20 различных баз данных с именами отделов компании:
DbNameWeird-100
DbNameWeird-125
DbNameWeird-245
DbNameWeird-336
...
Каждая база данных имеет одинаковую структуру.То, что я хотел бы сделать, - это полный рефакторинг, где вместо 20 различных соединений я мог бы сделать:
Foo::where('department', 125)->all();
В среднесрочной перспективе целью является объединение этих баз данных путем добавления нового столбца первичного ключа с именемdepartment
на каждом столе.Но в настоящее время я бы просто сделал:
$foo = Foo($department);
$foo->all();
Чтобы пойти в этом направлении, мне нужно получить мои соединения:
foreach($departments as $dep) {
DB::addConnection(dbConnection("DbNameWeird-{$dep}"), "db-{$dep}");
}
Затем мне нужно динамически обновить protected $connection
моего *Модель 1017 *.
Чтобы убить двух зайцев одним выстрелом, я написал это:
class Foo extends \Eloquent
{
protected $table = 'foo';
protected $connection;
public $timestamps = false;
protected $guarded = [];
public function __construct($department) {
DB::addConnection(dbConnection("DbNameWeird-{$department}"), "db-{$department}");
$this->connection = "db-{$department}";
parent::__construct();
}
}
dd((new Foo(42))->all());
К сожалению, это не работает.Я получаю эту ошибку:
Too few arguments to function Foo::__construct(), 0 passed in
project/portal/vendor/illuminate/database/Eloquent/Model.php
on line 460 and exactly 1 expected
Что не так с этим кодом?