✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo utilizar la función de conexiones de múltiples bases de datos de Laravel en un sitio web

785

¿Está buscando conectar múltiples bases de datos a su aplicación Laravel? A veces, puede encontrarse con una situación en la que necesite tratar con más de una base de datos. En este artículo, estudiamos cómo conectar y usar múltiples bases de datos en la aplicación Laravel. Laravel proporciona soporte para múltiples conexiones de bases de datos en su propio núcleo.

Por lo general, necesitamos una única base de datos para un sitio web. Sin embargo, es posible que tenga que almacenar algunos datos sobre su aplicación en otra base de datos. Trabajé en un proyecto de comercio electrónico en el que queríamos enviar los detalles del pedido a una base de datos separada. En su caso, los requisitos pueden ser diferentes.

Habiendo dicho eso, echemos un vistazo a la conexión y el uso de múltiples bases de datos con Laravel.

Agregar múltiples conexiones de base de datos en Laravel

Como dije, Laravel te permite conectar múltiples bases de datos. Podemos usar una plataforma de base de datos diferente como SQLite, MySQL, SQLSRV con Laravel. Para este tutorial, usaré otra instancia de MySQL de una base de datos separada. En otras palabras, vamos a tratar con una base de datos MySQL separada como almacenamiento adicional.

Laravel almacena una conexión de base de datos en el config/database.phparchivo. Para agregar otra conexión de MySQL tenemos que modificar este archivo.

Agreguemos otra conexión llamada ‘mysql2’. Puede dar cualquier otro nombre a esta conexión. Solo asegúrese de usar el mismo nombre al interactuar con la base de datos.

config / database.php

<?php
 
use IlluminateSupportStr;
 
return [
    ...
 
    'connections' => [
        ...
        ...
        'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_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'),
            ]): [],
        ],
 
        'mysql2' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST_2', '127.0.0.1'),
            'port' => env('DB_PORT_2', '3306'),
            'database' => env('DB_DATABASE_2', 'forge'),
            'username' => env('DB_USERNAME_2', 'forge'),
            'password' => env('DB_PASSWORD_2', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_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'),
            ]): [],
        ],
    ]

En el código anterior, la conexión ‘mysql’ es la predeterminada. Agregué una nueva conexión ‘mysql2’ con diferentes constantes. Aquí, pasé las constantes como DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2, etc. Si su base de datos está alojada en otro servidor, entonces debería cambiar las claves de DB_HOST_2 y DB_PORT_2 también. Supongo que ambas bases de datos están en el mismo servidor. Entonces, no voy a cambiar los valores de estas constantes.

Laravel obtiene los valores de estas constantes usando el env()método. Significa que debemos agregar otros detalles de la base de datos en un archivo ‘.env’ como se muestra a continuación.

DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=
DB_USERNAME_2=
DB_PASSWORD_2=

Después de realizar los pasos anteriores, terminamos de conectar otra base de datos en Laravel. Lo siguiente es interactuar con esta base de datos.

Ejecute la migración en otra base de datos en Laravel

Cuando se trata de Laravel, siempre debemos crear tablas en la base de datos usando Migraciones. Digamos que queremos crear una tabla de ‘productos’ en nuestra base de datos separada. Ejecute el siguiente comando que creará un archivo de migración.

php artisan make:migration create_products_table

Creará un nuevo archivo dentro del directorio ‘base de datos / migraciones’. Abra el archivo en el editor y pase la conexión recién creada como se muestra a continuación.

<?php
 
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
 
class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('mysql2')->create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }
 
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('mysql2')->dropIfExists('products');
    }
}

He pasado el valor ‘mysql2’ al connectionmétodo de la Schemaclase. Significa que cuando ejecuta el comando migrate, este código ejecuta el código anterior en la otra base de datos cuya cadena de conexión hemos pasado.

php artisan migrate

Después de ejecutar el comando anterior, diríjase a su segunda base de datos. Ahora debería tener una tabla de ‘productos’.

Ejecutar consultas en otra base de datos

En Laravel, puede interactuar con la base de datos a través de un Generador de consultas o usando el ORM de Eloquent.

DBfachada proporciona un método llamado conexión que se utiliza para ejecutar consultas en otra base de datos. Escribamos una consulta sobre la conexión ‘mysql2’ usando un Query Builder.

$products = DB::connection('mysql2')->select('SELECT * FROM products');
$products = DB::connection('mysql2')->select('SELECT * FROM products where id = ?', [1]);

Query Builder ejecutará automáticamente las consultas anteriores en la otra base de datos tomando una referencia al método de conexión.

Cuando se trata de Eloquent, hay 2 formas de conectar bases de datos independientes. La primera forma es usar la $connectionvariable dentro de su clase Model.

<?php
 
namespace AppModels;
 
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
 
class Product extends Model
{
    use HasFactory;
 
    /**
     * The connection name for the model.
     *
     * @var string
     */
    protected $connection = 'mysql2'; //pass the connection name here
}

Ahora, el modelo de ‘Productos’ se ocupará únicamente de la segunda base de datos.

En la segunda opción, puede crear una conexión sobre la marcha cuando sea necesario. De esta manera, puede interactuar con múltiples bases de datos desde un solo modelo.

<?php
...
use AppModelsProduct;
 
class ProductController extends Controller
{
    public function index()
    {
        $product = new Product;
        $product->setConnection('mysql2');
        $arr_product = $product->find(1);
        dd($arr_product);
    }
}

Aquí, he configurado el tiempo de ejecución de la conexión usando el setConnection()método.

¡Eso es! Espero que entiendas cómo conectar varias bases de datos en la aplicación Laravel. Comparta sus pensamientos y sugerencias en la sección de comentarios a continuación.

Artículos relacionados

Fuente de grabación: artisansweb.net

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More