Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment utiliser la fonctionnalité de connexions à plusieurs bases de données de Laravel sur un site Web

926

Vous cherchez à connecter plusieurs bases de données à votre application Laravel? Parfois, vous pouvez rencontrer une situation où vous devez traiter plus d’une base de données. Dans cet article, nous étudions comment se connecter et utiliser plusieurs bases de données dans l’application Laravel. Laravel prend en charge plusieurs connexions de base de données dans son noyau lui-même.

Habituellement, nous avons besoin d’une seule base de données pour un site Web. Mais, il est possible que vous deviez stocker certaines données de votre application sur une autre base de données. J’ai travaillé sur un projet de commerce électronique où nous voulions envoyer les détails de la commande à une base de données distincte. Dans votre cas, les exigences peuvent être différentes.

Cela dit, examinons la connexion et l’utilisation de plusieurs bases de données avec Laravel.

Ajouter plusieurs connexions de base de données dans Laravel

Comme je l’ai dit, Laravel vous permet de connecter plusieurs bases de données. Nous pouvons utiliser une plate-forme de base de données différente comme SQLite, MySQL, SQLSRV avec Laravel. Pour ce tutoriel, je vais utiliser une autre instance MySQL d’une base de données distincte. En d’autres termes, nous allons traiter une base de données MySQL distincte comme stockage supplémentaire.

Laravel stocke une connexion à la base de données dans le config/database.phpfichier. Pour ajouter une autre connexion de MySQL, nous devons modifier ce fichier.

Ajoutons une autre connexion à savoir ‘mysql2’. Vous pouvez donner n’importe quel autre nom à cette connexion. Assurez-vous simplement que vous utiliserez le même nom lors de l’interaction avec la base de données.

config/base de données.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'),
            ]): [],
        ],
    ]

Dans le code ci-dessus, la connexion ‘mysql’ est celle par défaut. J’ai ajouté une nouvelle connexion ‘mysql2’ avec des constantes différentes. Ici, j’ai passé les constantes en tant que DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2, etc. Si votre base de données est hébergée sur un autre serveur, vous devez également modifier les clés de DB_HOST_2 et DB_PORT_2. Je suppose que les deux bases de données sont sur le même serveur. Donc, je ne change pas les valeurs de ces constantes.

Laravel obtient les valeurs de ces constantes en utilisant la env()méthode. Cela signifie que nous devons ajouter d’autres détails de la base de données dans un fichier ‘.env’ comme ci-dessous.

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

Après avoir effectué les étapes ci-dessus, nous avons terminé de connecter une autre base de données dans Laravel. La prochaine chose est d’interagir avec cette base de données.

Exécuter la migration sur une autre base de données dans Laravel

En ce qui concerne Laravel, nous devons toujours créer des tables dans la base de données à l’aide de Migrations. Disons que nous voulons créer une table « produits » dans notre base de données distincte. Exécutez la commande ci-dessous qui créera un fichier de migration.

php artisan make:migration create_products_table

Il créera un nouveau fichier dans le répertoire ‘database/migrations’. Ouvrez le fichier dans l’éditeur et transmettez la connexion nouvellement créée comme indiqué ci-dessous.

<?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');
    }
}

J’ai passé la valeur ‘mysql2’ à la connectionméthode de la Schemaclasse. Cela signifie que lorsque vous exécutez la commande migrate, ce code exécute le code ci-dessus sur l’autre base de données à laquelle nous avons transmis la chaîne de connexion.

php artisan migrate

Après avoir exécuté la commande ci-dessus, accédez à votre deuxième base de données. Il devrait maintenant avoir une table « produits ».

Exécuter des requêtes sur une autre base de données

Dans Laravel, vous pouvez interagir avec la base de données via un générateur de requêtes ou en utilisant Eloquent ORM.

DBfaçade fournit une méthode appelée connexion qui est utilisée pour exécuter des requêtes sur une autre base de données. Écrivons une requête sur la connexion ‘mysql2’ à l’aide d’un générateur de requêtes.

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

Query Builder exécutera automatiquement les requêtes ci-dessus sur l’autre base de données en faisant référence à la méthode de connexion.

En ce qui concerne Eloquent, il existe 2 façons de connecter des bases de données distinctes. La première consiste à utiliser la $connectionvariable à l’intérieur de votre classe 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
}

Désormais, le modèle ‘Produits’ ne traitera que de la deuxième base de données.

Dans la deuxième option, vous pouvez établir une connexion à la volée chaque fois que nécessaire. De cette façon, vous pouvez interagir avec plusieurs bases de données à partir d’un seul modèle.

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

Ici, j’ai défini l’exécution de la connexion à l’aide de la setConnection()méthode.

C’est ça! J’espère que vous comprenez comment connecter plusieurs bases de données dans l’application Laravel. S’il vous plaît partager vos pensées et suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails