Conectar un modelo a otra base de datos en Laravel

En uno de los proyectos que estamos haciendo en Calima tenemos que interactuar con la base de datos existente de un proyecto, pero no tenemos mucho permiso para modificar su estructura así que tenemos dos bases de datos diferentes.

Conectar un modelo a otra base de datos en Laravel
Photo by israel palacio / Unsplash

En uno de los proyectos que estamos haciendo en Calima tenemos que interactuar con la base de datos existente de un proyecto, pero no tenemos mucho permiso para modificar su estructura así que tenemos dos bases de datos diferentes.

Gracias a Eloquent y Laravel, es bastante fácil gestionar esto. En primer lugar, nos vamos a nuestro fichero config/database.php y configuramos una nueva conexión. En mi caso, es una base de datos SQL Server así que la configuro de la siguiente manera:

[
	'connections' => [
		'gcs' => [
			'driver' => 'sqlsrv',
			'url' => env('GCS_DATABASE_URL'),
			'host' => env('GCS_DB_HOST', '127.0.0.1'),
			'port' => env('GCS_DB_PORT', '1433'),
			'database' => env('GCS_DB_DATABASE', 'forge'),
			'username' => env('GCS_DB_USERNAME', 'forge'),
			'password' => env('GCS_DB_PASSWORD', ''),
			'charset' => 'utf8',
			'prefix' => '',
			'prefix_indexes' => true,
		],
	]
]

Una vez la nueva conexión está configurada, solamente tenemos que irnos a nuestro modelo de Eloquent y configurarle la propiedad $connection. En mi caso, como era algo que se usaría en diferentes modelos, creé un modelo base para luego extender desde el resto.

El modelo base:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class GcsModel extends Model
{
    protected $connection = 'gcs';
}

El resto de modelos:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;

class Brand extends GcsModel
{
    use HasFactory;
}

Y ya con esto, el modelo Brand estará conectado directamente a esta otra base de datos!