✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Laraveli mitme andmebaasiühenduse funktsiooni kasutamine veebisaidil

13

Kas soovite oma Laraveli rakendusega ühendada mitu andmebaasi? Mõnikord võite kohata olukorda, kus peate tegelema rohkem kui ühe andmebaasiga. Selles artiklis uurime, kuidas ühendada ja kasutada mitut andmebaasi Laraveli rakenduses. Laravel pakub tuge mitmele andmebaasiühendusele oma tuumas.

Tavaliselt vajame ühe veebisaidi jaoks ühte andmebaasi. Kuid võib olla, et peate oma rakenduse kohta mõned andmed salvestama teise andmebaasi. Töötasin e-kaubanduse projektiga, kus soovisime tellimuse üksikasjad saata eraldi andmebaasi. Teie puhul võivad nõuded olla erinevad.

Seda öeldes vaatame üle mitme andmebaasi ühendamise ja kasutamise Laraveliga.

Lisage Laravelisse mitu andmebaasiühendust

Nagu ma ütlesin, võimaldab Laravel teil ühendada mitu andmebaasi. Saame Laraveliga kasutada erinevat andmebaasiplatvormi nagu SQLite, MySQL, SQLSRV. Selle õpetuse jaoks kavatsen kasutada veel ühte eraldi andmebaasi MySQL-i eksemplari. Sõnade järjekorras tegeleme eraldi MySQL-i andmebaasiga täiendava salvestusruumina.

Laravel salvestab config/database.phpfaili andmebaasiühenduse. MySQL-i teise ühenduse lisamiseks peame seda faili muutma.

Lisame veel ühe ühenduse nimega ‘mysql2’. Sellele ühendusele saate anda mis tahes muu nime. Veenduge, et kasutate andmebaasiga suheldes sama nime.

config / andmebaas.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'),
            ]): [],
        ],
    ]

Ülaltoodud koodis on ühendus ‘mysql’ vaikekood. Lisasin uue konstantidega uue ühenduse ‘mysql2’. Siin läbisin konstandid nimedega DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2 jne. Kui teie andmebaasi hostitakse mõnes teises serveris, peaksite muutma ka DB_HOST_2 ja DB_PORT_2 võtmeid. Eeldan, et mõlemad andmebaasid asuvad ühes serveris. Niisiis, ma ei muuda nende konstantide väärtusi.

Laravel saab env()meetodi abil nende konstantide väärtused. See tähendab, et peaksime lisama muud andmebaasi üksikasjad faili .env, nagu allpool.

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

Pärast ülaltoodud toimingute tegemist oleme teise andmebaasi ühendamisega Laravelis. Järgmine kraam suhtleb selle andmebaasiga.

Käivitage migreerimine Laraveli teises andmebaasis

Laraveli osas peaksime alati Migrations abil andmebaasi tabeleid looma. Oletame, et tahame oma eraldi andmebaasi luua tabeli „tooted". Käivitage järgmine käsk, mis loob migreerimisfaili.

php artisan make:migration create_products_table

See loob kataloogi ‘andmebaas / migreerimised’ uue faili. Avage fail redaktorisse ja edastage vastloodud ühendus, nagu allpool näidatud.

<?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 klassi connectionmeetodile edastanud väärtuse ‘mysql2’ Schema. See tähendab, et kui käivitate käsu migrate, käivitab see kood ülaltoodud koodi teises andmebaasis, mille ühenduse stringi oleme edastanud.

php artisan migrate

Pärast ülaltoodud käsu käivitamist minge oma teise andmebaasi. Nüüd peaks sellel olema toodete tabel.

Käivitage päringud teises andmebaasis

Laravelis saate andmebaasiga suhelda kas päringute koostaja kaudu või kasutades sõnaühendit ORM.

DBfassaad pakub meetodit nimega ühendus, mida kasutatakse teises andmebaasis päringute käivitamiseks. Kirjutame päringu loomise abil päringu ühendusele ‘mysql2’.

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

Query Builder täidab ülaltoodud päringud automaatselt teises andmebaasis, viidates ühenduse meetodile.

Mis puutub Eloquenti, siis on eraldi andmebaaside ühendamiseks kaks võimalust. Esimene võimalus on kasutada $connectionmudeli klassi muutujat.

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

Nüüd tegeleb mudel "Tooted" ainult teise andmebaasiga.

Teise võimalusena saate ühenduse luua alati käigu pealt. Nii saate ühest mudelist suhelda mitme andmebaasiga.

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

Siin olen setConnection()meetodi abil ühenduse käitamise määranud .

See selleks! Loodan, et saate aru, kuidas Laraveli rakenduses ühendada mitu andmebaasi. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem