...
✅ Notizie, temi, plugin WEB e WordPress. Qui condividiamo suggerimenti e le migliori soluzioni per siti web.

Come utilizzare la funzionalità di connessioni multiple di database di Laravel su un sito Web

160

Stai cercando di connettere più database alla tua applicazione Laravel? A volte, potresti imbatterti in una situazione in cui devi gestire più di un database. In questo articolo, studiamo come connettere e utilizzare più database nell’applicazione Laravel. Laravel fornisce supporto per più connessioni al database nel suo stesso nucleo.

Di solito, abbiamo bisogno di un singolo database per un sito web. Tuttavia, può essere possibile che tu debba memorizzare alcuni dati sulla tua applicazione su un altro database. Ho lavorato a un progetto di e-commerce in cui volevamo inviare i dettagli dell’ordine a un database separato. Nel tuo caso, i requisiti possono essere diversi.

Detto questo, diamo un’occhiata alla connessione e all’utilizzo di più database con Laravel.

Aggiungi più connessioni al database in Laravel

Come ho detto, Laravel ti consente di connettere più database. Possiamo utilizzare una piattaforma di database diversa come SQLite, MySQL, SQLSRV con Laravel. Per questo tutorial, utilizzerò un’altra istanza MySQL di un database separato. In parole povere, ci occuperemo di un database MySQL separato come spazio di archiviazione aggiuntivo.

Laravel memorizza una connessione al database nel config/database.phpfile. Per aggiungere un’altra connessione di MySQL dobbiamo modificare questo file.

Aggiungiamo un’altra connessione e cioè ‘mysql2’. Puoi dare qualsiasi altro nome a questa connessione. Assicurati di utilizzare lo stesso nome mentre interagisci con il database.

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'),
            ]): [],
        ],
    ]

Nel codice sopra, la connessione ‘mysql’ è quella predefinita. Ho aggiunto una nuova connessione "mysql2" con diverse costanti. Qui, ho passato le costanti come DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2, ecc. Se il tuo database è ospitato su un altro server, dovresti cambiare anche le chiavi di DB_HOST_2 e DB_PORT_2. Presumo che entrambi i database siano sullo stesso server. Quindi, non cambio i valori di queste costanti.

Laravel ottiene i valori di queste costanti usando il env()metodo. Significa che dovremmo aggiungere altri dettagli del database in un file ‘.env’ come di seguito.

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

Dopo aver eseguito i passaggi precedenti, abbiamo finito di connettere un altro database in Laravel. La prossima cosa è interagire con questo database.

Esegui la migrazione su un altro database in Laravel

Quando si tratta di Laravel, dovremmo sempre creare tabelle nel database utilizzando le migrazioni. Supponiamo di voler creare una tabella "prodotti" nel nostro database separato. Esegui il comando seguente che creerà un file di migrazione.

php artisan make:migration create_products_table

Creerà un nuovo file all’interno della directory ‘database/migrations’. Apri il file nell’editor e passa la connessione appena creata come mostrato di seguito.

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

Ho passato il valore ‘mysql2’ al connectionmetodo della Schemaclasse. Significa che quando esegui il comando migrate, questo codice esegue il codice sopra sull’altro database la cui stringa di connessione è stata passata.

php artisan migrate

Dopo aver eseguito il comando sopra, vai al tuo secondo database. Ora dovrebbe avere una tabella "prodotti".

Esegui query su un altro database

In Laravel, puoi interagire con il database tramite un Query Builder o utilizzando Eloquent ORM.

DBfacciata fornisce un metodo chiamato connection che viene utilizzato per eseguire query su un altro database. Scriviamo una query sulla connessione ‘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 eseguirà automaticamente le query di cui sopra sull’altro database facendo riferimento al metodo di connessione.

Quando si tratta di Eloquent, ci sono 2 modi per connettere database separati. Il primo modo è usare la $connectionvariabile all’interno della 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
}

Ora il modello "Prodotti" si occuperà solo del secondo database.

Nella seconda opzione, puoi creare una connessione al volo ogni volta che è necessario. In questo modo è possibile interagire con più database da un unico Modello.

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

Qui, ho impostato il runtime della connessione utilizzando il setConnection()metodo.

Questo è tutto! Spero che tu capisca come connettere più database nell’applicazione Laravel. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.

articoli Correlati

Fonte di registrazione: 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