So verwenden Sie die Funktion für mehrere Datenbankverbindungen von Laravel auf einer Website
Möchten Sie mehrere Datenbanken mit Ihrer Laravel-Anwendung verbinden? Manchmal können Sie auf eine Situation stoßen, in der Sie mit mehr als einer Datenbank umgehen müssen. In diesem Artikel untersuchen wir, wie Sie mehrere Datenbanken in der Laravel-Anwendung verbinden und verwenden. Laravel bietet im Kern selbst Unterstützung für mehrere Datenbankverbindungen.
Normalerweise benötigen wir eine einzige Datenbank für eine Website. Es kann jedoch sein, dass Sie einige Daten zu Ihrer Anwendung in einer anderen Datenbank speichern müssen. Ich arbeitete an einem E-Commerce-Projekt, bei dem wir Bestelldetails an eine separate Datenbank senden wollten. In Ihrem Fall können die Anforderungen unterschiedlich sein.
Lassen Sie uns jedoch einen Blick auf die Verbindung und Verwendung mehrerer Datenbanken mit Laravel werfen.
Fügen Sie mehrere Datenbankverbindungen in Laravel hinzu
Wie gesagt, mit Laravel können Sie mehrere Datenbanken verbinden. Wir können eine andere Datenbankplattform wie SQLite, MySQL, SQLSRV mit Laravel verwenden. Für dieses Tutorial werde ich eine andere MySQL-Instanz einer separaten Datenbank verwenden. Mit anderen Worten, wir werden es mit einer separaten MySQL-Datenbank als zusätzlichen Speicher zu tun haben.
Laravel speichert eine Datenbankverbindung in der config/database.php
Datei. Um eine weitere MySQL-Verbindung hinzuzufügen, müssen wir diese Datei ändern.
Fügen wir eine weitere Verbindung hinzu, nämlich ‘mysql2’. Sie können dieser Verbindung einen beliebigen anderen Namen geben. Stellen Sie nur sicher, dass Sie bei der Interaktion mit der Datenbank denselben Namen verwenden.
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'),
]): [],
],
]
Im obigen Code ist die Verbindung ‘mysql’ die Standardverbindung. Ich habe eine neue Verbindung ‘mysql2’ mit verschiedenen Konstanten hinzugefügt. Hier habe ich die Konstanten als DB_DATABASE_2, DB_USERNAME_2, DB_PASSWORD_2 usw. übergeben. Wenn Ihre Datenbank auf einem anderen Server gehostet wird, sollten Sie auch die Schlüssel von DB_HOST_2 und DB_PORT_2 ändern. Ich gehe davon aus, dass sich beide Datenbanken auf demselben Server befinden. Ich ändere die Werte dieser Konstanten also nicht.
Laravel erhält die Werte dieser Konstanten mit der env()
Methode. Dies bedeutet, dass wir andere Datenbankdetails in einer ‘.env’-Datei wie unten beschrieben hinzufügen sollten.
DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=
DB_USERNAME_2=
DB_PASSWORD_2=
Nachdem wir die obigen Schritte ausgeführt haben, sind wir mit der Verbindung einer anderen Datenbank in Laravel fertig. Das nächste Zeug ist die Interaktion mit dieser Datenbank.
Führen Sie die Migration auf einer anderen Datenbank in Laravel aus
Wenn es um Laravel geht, sollten wir immer Tabellen in der Datenbank mit Migrationen erstellen. Nehmen wir an, wir möchten eine ‘Produkte’-Tabelle in unserer separaten Datenbank erstellen. Führen Sie den folgenden Befehl aus, der eine Migrationsdatei erstellt.
php artisan make:migration create_products_table
Es wird eine neue Datei im Verzeichnis ‘database/migrations’ erstellt. Öffnen Sie die Datei im Editor und übergeben Sie die neu erstellte Verbindung wie unten gezeigt.
<?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');
}
}
Ich habe der connection
Methode der Schema
Klasse den Wert ‘mysql2’ übergeben. Das heißt, wenn Sie den Migrationsbefehl ausführen, führt dieser Code den obigen Code in der anderen Datenbank aus, deren Verbindungszeichenfolge wir übergeben haben.
php artisan migrate
Nachdem Sie den obigen Befehl ausgeführt haben, gehen Sie zu Ihrer zweiten Datenbank. Es sollte jetzt eine ‘Produkte’-Tabelle haben.
Abfragen in einer anderen Datenbank ausführen
In Laravel können Sie entweder über einen Query Builder oder mit dem Eloquent ORM mit der Datenbank interagieren .
DB
Fassade bietet eine Methode namens connection, die verwendet wird, um Abfragen auf einer anderen Datenbank auszuführen. Lassen Sie uns mit einem Abfragegenerator eine Abfrage für die Verbindung ‘mysql2’ schreiben.
$products = DB::connection('mysql2')->select('SELECT * FROM products');
$products = DB::connection('mysql2')->select('SELECT * FROM products where id = ?', [1]);
Der Query Builder führt die obigen Abfragen automatisch in der anderen Datenbank aus, indem er einen Verweis auf die Verbindungsmethode verwendet.
Bei Eloquent gibt es 2 Möglichkeiten, separate Datenbanken zu verbinden. Die erste Möglichkeit besteht darin, die $connection
Variable in Ihrer Model-Klasse zu verwenden.
<?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
}
Jetzt behandelt das Modell ‘Produkte’ nur die zweite Datenbank.
Bei der zweiten Option können Sie bei Bedarf im Handumdrehen eine Verbindung aufbauen. Auf diese Weise können Sie mit mehreren Datenbanken aus einem einzigen Modell interagieren.
<?php
...
use AppModelsProduct;
class ProductController extends Controller
{
public function index()
{
$product = new Product;
$product->setConnection('mysql2');
$arr_product = $product->find(1);
dd($arr_product);
}
}
Hier habe ich die Verbindungslaufzeit mit setConnection()
Methode eingestellt.
Das ist es! Ich hoffe, Sie verstehen, wie Sie mehrere Datenbanken in der Laravel-Anwendung verbinden. Bitte teilen Sie Ihre Gedanken und Vorschläge im Kommentarbereich unten mit.
Zum Thema passende Artikel
- Erstellen Sie eine mehrsprachige Website in PHP mit dem Laravel Framework
- Eine Anleitung zum Hochladen und Komprimieren von Bildern in Laravel
- So installieren und verwenden Sie CKEditor in Laravel