✅ WEB- ja WordPress -uutiset, -teemat, -laajennukset. Täällä jaamme vinkkejä ja parhaita verkkosivustoratkaisuja.

Kuinka käyttää Laravel Multiple Database Connection -ominaisuutta verkkosivustolla

18

Haluatko yhdistää useita tietokantoja Laravel-sovellukseesi? Joskus saatat kohdata tilanteen, jossa sinun on käsiteltävä useampaa kuin yhtä tietokantaa. Tässä artikkelissa tutkitaan kuinka yhdistää ja käyttää useita tietokantoja Laravel-sovelluksessa. Laravel tukee itse ytimessään useita tietokantayhteyksiä.

Yleensä tarvitsemme yhden tietokannan yhdelle verkkosivustolle. Mutta voi olla mahdollista, että joudut tallentamaan tietoja sovelluksestasi toiseen tietokantaan. Työskentelin verkkokaupan projektissa, jossa halusimme lähettää tilaustiedot erilliseen tietokantaan. Sinun tapauksessasi vaatimukset voivat olla erilaiset.

Tämän jälkeen katsotaanpa useiden tietokantojen yhdistäminen ja käyttäminen Laravelin kanssa.

Lisää useita tietokantayhteyksiä Laraveliin

Kuten sanoin, Laravel antaa sinun yhdistää useita tietokantoja. Voimme käyttää erilaista tietokanta-alustaa, kuten SQLite, MySQL, SQLSRV Laravelin kanssa. Tässä opetusohjelmassa aion käyttää toista erillisen tietokannan MySQL-esiintymää. Sanojen järjestyksessä aiomme käsitellä erillistä MySQL-tietokantaa lisätallennustilana.

Laravel tallentaa tietokantayhteyden config/database.phptiedostoon. Jos haluat lisätä toisen MySQL-yhteyden, meidän on muokattava tätä tiedostoa.

Lisätään toinen yhteys, nimittäin ‘mysql2’. Voit antaa tälle yhteydelle minkä tahansa muun nimen. Varmista vain, että käytät samaa nimeä, kun olet vuorovaikutuksessa tietokannan kanssa.

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

Yllä olevassa koodissa yhteys ‘mysql’ on oletusarvo. Lisäsin uuden yhteyden ‘mysql2’ eri vakioilla. Tässä ohitin vakiot nimillä DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2 jne. Jos tietokantaasi isännöidään toisella palvelimella, sinun on vaihdettava myös DB_HOST_2 ja DB_PORT_2 avaimet. Oletan, että molemmat tietokannat ovat samassa palvelimessa. Joten, en muuta näiden vakioiden arvoja.

Laravel saa näiden vakioiden arvot env()menetelmällä. Se tarkoittaa, että meidän pitäisi lisätä muita tietokantatietoja .env-tiedostoon alla.

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

Edellä mainittujen vaiheiden suorittamisen jälkeen yhdistämme toisen tietokannan Laraveliin. Seuraavat asiat ovat vuorovaikutuksessa tämän tietokannan kanssa.

Suorita siirto toisessa Laravel-tietokannassa

Kun on kyse Laravelista, meidän on aina luotava taulukoita taulukkoon Migrations-sovelluksen avulla. Oletetaan, että haluamme luoda ‘tuotteet’ -taulukon erilliseen tietokantaan. Suorita alla oleva komento, joka luo siirtotiedoston.

php artisan make:migration create_products_table

Se luo uuden tiedoston ‘tietokanta / siirrot’ -hakemistoon. Avaa tiedosto editoriin ja välitä juuri luotu yhteys alla olevan kuvan mukaisesti.

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

Olen välittänyt arvon ‘mysql2’ luokan connectionmetodille Schema. Se tarkoittaa, että kun suoritat siirtymiskomennon, tämä koodi suorittaa yllä olevan koodin toisessa tietokannassa, minkä yhteyden merkkijonon olemme välittäneet.

php artisan migrate

Kun olet suorittanut yllä olevan komennon, siirry toiseen tietokantaan. Siinä pitäisi nyt olla "tuotteet" -taulukko.

Suorita kyselyt toisessa tietokannassa

Laravelissa voit olla vuorovaikutuksessa tietokannan kanssa joko Query Builderin kautta tai käyttämällä Eloquent ORM: ää.

DBjulkisivu tarjoaa yhteyden nimisen menetelmän, jota käytetään kyselyjen suorittamiseen toisessa tietokannassa. Kirjoitetaan kysely yhteydelle ‘mysql2’ Query Builderilla.

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

Query Builder suorittaa yllä olevat kyselyt automaattisesti toisessa tietokannassa viittaamalla yhteysmenetelmään.

Kun kyseessä on Eloquent, on kaksi tapaa yhdistää erilliset tietokannat. Ensimmäinen tapa on käyttää $connectionmuuttujaa Model-luokassa.

<?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
}

Tuotemalli käsittelee nyt vain toista tietokantaa.

Toisessa vaihtoehdossa voit luoda yhteyden lennossa tarvittaessa. Tällä tavalla voit olla vuorovaikutuksessa useiden tietokantojen kanssa yhdestä mallista.

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

Tässä olen asettanut yhteyden ajonaikaisen setConnection()menetelmän.

Se siitä! Toivon, että ymmärrät kuinka yhdistää useita tietokantoja Laravel-sovelluksessa. Jaa ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.

Aiheeseen liittyvät artikkelit

Tämä verkkosivusto käyttää evästeitä parantaakseen käyttökokemustasi. Oletamme, että olet kunnossa, mutta voit halutessasi kieltäytyä. Hyväksyä Lisätietoja