Im .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=database1
DB_USERNAME=root
DB_PASSWORD=secret
DB_CONNECTION_SECOND=mysql
DB_HOST_SECOND=127.0.0.1
DB_PORT_SECOND=3306
DB_DATABASE_SECOND=database2
DB_USERNAME_SECOND=root
DB_PASSWORD_SECOND=secret
Im config/database.php
'mysql' => [
'driver' => env('DB_CONNECTION'),
'host' => env('DB_HOST'),
'port' => env('DB_PORT'),
'database' => env('DB_DATABASE'),
'username' => env('DB_USERNAME'),
'password' => env('DB_PASSWORD'),
],
'mysql2' => [
'driver' => env('DB_CONNECTION_SECOND'),
'host' => env('DB_HOST_SECOND'),
'port' => env('DB_PORT_SECOND'),
'database' => env('DB_DATABASE_SECOND'),
'username' => env('DB_USERNAME_SECOND'),
'password' => env('DB_PASSWORD_SECOND'),
],
Hinweis: In mysql2
wenn DB_username und DB_PASSWORD gleich ist, dann können Sie verwenden , env('DB_USERNAME')
die in metioned ist .env
ersten Zeilen.
Verbindungen definieren
app/config/database.php
return array(
'default' => 'mysql',
'connections' => array(
# Primary/Default database connection
'mysql' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database1',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
# Secondary database connection
'mysql2' => array(
'driver' => 'mysql',
'host' => '127.0.0.1',
'database' => 'database2',
'username' => 'root',
'password' => 'secret'
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
);
Schema
Führen Sie einfach die connection()
Methode aus, um anzugeben, welche Verbindung verwendet werden soll
Schema::connection('mysql2')->create('some_table', function($table)
{
$table->increments('id'):
});
Abfrage Ersteller
$users = DB::connection('mysql2')->select(...);
Beredt
Legen Sie die $connection
Variable in Ihrem Modell fest
class SomeModel extends Eloquent {
protected $connection = 'mysql2';
}
Sie können die Verbindung auch zur Laufzeit über die setConnection
Methode oder die on
statische Methode definieren:
class SomeController extends BaseController {
public function someMethod()
{
$someModel = new SomeModel;
$someModel->setConnection('mysql2'); // non-static method
$something = $someModel->find(1);
$something = SomeModel::on('mysql2')->find(1); // static method
return $something;
}
}
Hinweis Seien Sie vorsichtig beim Versuch, Beziehungen zu Tabellen über Datenbanken hinweg aufzubauen! Dies ist möglich, kann jedoch mit einigen Einschränkungen verbunden sein und hängt davon ab, über welche Datenbank und / oder Datenbankeinstellungen Sie verfügen.
Verwenden mehrerer Datenbankverbindungen
Wenn Sie mehrere Verbindungen verwenden, können Sie connection
über die Verbindungsmethode an der DB
Fassade auf jede zugreifen . Die name
an die connection
Methode übergebene Verbindung sollte einer der in Ihrer config/database.php
Konfigurationsdatei aufgeführten Verbindungen entsprechen :
$users = DB::connection('foo')->select(...);
Sie können auch mit der getPdo-Methode für eine Verbindungsinstanz auf die zugrunde liegende unformatierte PDO-Instanz zugreifen:
$pdo = DB::connection()->getPdo();
Nützliche Links
- Laravel 5 Mehrfachdatenbankverbindung FROM
laracasts.com
- Verbinden Sie mehrere Datenbanken in Laravel FROM
tutsnare.com
- Mehrere DB-Verbindungen in Laravel FROM
fideloper.com
class SomeModel extends Model {
und auch sicherstellen, dass Sie Get-Werte aus der env-Datei entfernt haben, wieenv('DB_DATABASE', 'name')
beim Erstellen eines neuen DB-Konfigurationsarrays in der Datei database.php, wie @sba erwähnt hatIn Laravel 5.1 geben Sie die Verbindung an:
Standardmäßig verwendet Laravel die Standardverbindung. Es ist einfach, nicht wahr?
Lesen Sie hier mehr: http://laravel.com/docs/5.1/database#accessing-connections
quelle
Funktioniert eigentlich
DB::connection('name')->select(..)
nicht für mich, weil 'Name' in doppelten Anführungszeichen stehen muss: "Name"Trotzdem wird die Auswahlabfrage für meine Standardverbindung ausgeführt. Ich versuche immer noch herauszufinden, wie ich Laravel davon überzeugen kann, so zu arbeiten, wie es beabsichtigt ist: Ändern Sie die Verbindung.
Edit: Ich habe es herausgefunden. Nach dem Debuggen von Laravels DatabaseManager stellte sich heraus, dass meine database.php (Konfigurationsdatei) (in $ this-> app) falsch war. Im Abschnitt "Verbindungen" hatte ich Sachen wie "Datenbank" mit Werten derjenigen, aus denen ich sie kopiert habe. In klaren Worten statt
Ich musste so etwas platzieren
da alle Verbindungen mit den gleichen Werten für die Datenbank, den Benutzernamen, das Passwort usw. aufgelistet wurden, ist dies natürlich wenig sinnvoll, wenn ich auf mindestens einen anderen Datenbanknamen zugreifen möchte
Daher landete ich jedes Mal, wenn ich etwas aus einer anderen Datenbank auswählen wollte, in meiner Standarddatenbank
quelle
Laravel bietet integrierte Unterstützung für mehrere Datenbanksysteme. Sie müssen die Verbindungsdetails in der Datei config / database.php angeben
Sobald Sie dies haben, können Sie zwei Basismodellklassen für jede Verbindung erstellen und den Verbindungsnamen in diesen Modellen definieren
Sie können diese Modelle erweitern, um weitere Modelle für Tabellen in jeder Datenbank zu erstellen.
quelle