Я пытаюсь создать динамическое соединение с базой данных для каждой из моих моделей, чтобы я мог передать имя соединения, используя $model->setConnection('connection_name)
Я пробовал множество ответов на подобные вопросы, но ничего не работает
Я создал класс, который создает новое соединение с базой данных и добавляет его в конфигурацию базы данных
<?php
namespace App;
use Illuminate\Support\Facades\Config;
class Clientdb
{
public $connection;
public function __construct($dbUser, $dbPassword, $dbName)
{
Config::set('database.connections.' . $dbUser, array(
'driver' => 'mysql',
'host' => '55.55.55.55',
'port' => '3306',
'database' => $dbName,
'username' => $dbUser,
'password' => $dbPassword,
'unix_socket' => '',
'charset' => 'utf8',
'collation' => 'utf8_general_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
\PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
));
$this->connection = $dbUser;
}
public function connection() {
return $this->connection;
}
}
В моем контроллере я создаю новый экземпляр моего нового класса для добавления в конфигурацию базы данных, затем я создаю новый экземпляр моей модели и передаю имя соединения в функцию setConnection () модели.
$this->clientdb = new Clientdb($dbUser, $dbPassword, $dbName);
$model = new \App\MyModel();
// dd($this->clientdb->connection);
$model->setConnection($this->clientdb->connection);
// dd($model);
$result = $model::where('id', $id)->first();
Проблема в том, что он все еще пытается использовать соединение, установленное в модели, и соединение не обновляется. Если я жестко закодирую новое имя соединения в моей модели, оно работает, но мне нужно сделать соединения динамическими, поскольку я не хочу продолжать добавлять в конфигурацию базы данных вручную.
Что мне не хватает, чтобы обновить соединение в модели.
Это пример моей модели
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class MyModel extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'my_table';
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
/**
* The connection name for the model.
*
* @var string
*/
protected $connection = 'mysql';
}
sdfsf