Атрибут connection
Атрибут connection в модели Eloquent позволяет явно задать подключение к базе данных, которое будет использоваться для всех операций с этой моделью. Если атрибут не указан, модель использует подключение по умолчанию из конфигурации. Первым параметром передаётся имя подключения из файла config/database.php.
Синтаксис
<?php
class Article extends Model
{
protected $connection = 'mysql';
}
?>
Пример
Давайте укажем для модели Article подключение к базе данных 'pgsql':
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $connection = 'pgsql';
}
?>
Теперь все запросы к модели Article будут выполняться через подключение PostgreSQL:
<?php
use AppModelsArticle;
$articles = Article::all();
foreach ($articles as $article) {
echo $article->title;
}
?>
Пример
Давайте создадим модель User с динамическим определением подключения через конструктор:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class User extends Model
{
public function __construct(array $attributes = [], $connection = null)
{
parent::__construct($attributes);
if ($connection !== null) {
$this->connection = $connection;
}
}
}
?>
Теперь можно создавать экземпляры модели с разными подключениями:
<?php
use AppModelsUser;
$users_mysql = new User([], 'mysql');
$users_pgsql = new User([], 'pgsql');
$res = $users_mysql->all();
echo count($res);
?>
Результат выполнения кода:
"10"
Пример
Давайте используем атрибут connection вместе с методом on для временного изменения подключения:
<?php
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Article extends Model
{
protected $connection = 'mysql';
}
?>
В контроллере можно переопределить подключение на лету:
<?php
use AppModelsArticle;
$articles_mysql = Article::all();
$articles_pgsql = Article::on('pgsql')->get();
echo 'MySQL: ' . count($articles_mysql);
echo 'PostgreSQL: ' . count($articles_pgsql);
?>
Результат выполнения кода:
"MySQL: 15"
"PostgreSQL: 8"
Смотрите также
-
атрибут
table,
который задаёт имя таблицы для модели -
атрибут
primaryKey,
который определяет первичный ключ модели -
атрибут
timestamps,
который управляет автоматическими метками времени -
метод
connection,
который получает подключение к базе данных через фасад DB