Ich muss die Laravel 5-Datenbankverbindung zur Laufzeit ändern.
Hast du eine Ahnung davon?
Bitte teilen Sie mit mir.
Vielen Dank.
Arjun
Ich muss die Laravel 5-Datenbankverbindung zur Laufzeit ändern.
Hast du eine Ahnung davon?
Bitte teilen Sie mit mir.
Vielen Dank.
NiRR
Sie können die Verbindungsdetails während der Laufzeit mit ändern
Config::set('database.connections.mysql.database', 'other_database');
aber vergiss nicht zu rennen purge
vorher um den Cache zu löschen
DB::purge('mysql');
Ich habe zehn Stunden damit verschwendet, die Standarddatenbank zur Laufzeit zu ändern. Was ich vergessen habe, war die Methode DB::purge(). Vielen Dank!
– Renan Coelho
7. Februar 2018 um 20:37 Uhr
Wirklich danke für Hilfe. DB::purge(‘mysql’) ist der Schlüssel!
– Adam Kozlowski
25. September 2018 um 8:20 Uhr
Wenn die andere Datenbank ein anderes Passwort verwendet, benötigen Sie Config::set('database.connections.mysql', Config::get('database.connections.other_database'));
wobei „other_database“ ein eigener Schlüssel ist, der auf ein Array von Anmeldeinformationen verweist
– Ich möchte Antworten
6. Mai 2021 um 15:54 Uhr
FBidu
Aktualisieren: Diese Antwort ist von 2015! Ich habe Laravel seit Jahren nicht mehr verwendet und bin mit den neuesten Best Practices nicht auf dem Laufenden. Diese Antwort wird immer wieder positiv bewertet, also nehme ich an, dass sie funktioniert, aber bitte gehen Sie mit Vorsicht vor.
Nun, meine direkte Antwort darauf lautet: nicht. Die Chancen stehen gut, dass Sie Ihre Aufgabe erfüllen können, indem Sie Ihr Datenmodell ändern und mit fortgeschritteneren Beziehungen arbeiten. Es ist schwer zu sagen, ohne zu wissen, was Sie tun möchten, aber es scheint mir im Allgemeinen eine schlechte Idee zu sein, insbesondere wenn Sie eloquente Modelle und so weiter verwenden möchten
Das heißt, in einem Szenario, in dem Sie wirklich Daten in einer anderen Datenbank ändern oder eine Rohabfrage ausführen müssen, können Sie die verwenden DB::connection()
Methode. Etwas wie:
$data = DB::connection('another_connection')->select(...);
Das kannst du angeben another_connection
variabel bei Ihnen database.php
Datei. So was:
<?php
return array(
'default' => 'mysql',
'connections' => array(
# Your regular connection
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'user',
'password' => 'password'
'charset' => 'utf8',
),
# Your new connection
'another_connection' => array(
'driver' => 'mysql',
'host' => 'another_host',
'database' => 'another_db',
'username' => 'user1',
'password' => 'password1'
'charset' => 'utf8',
),
),
);
Sie können sogar eine Verbindung für jedes eloquente Modell mit angeben protected $connection = 'another_connection';
Sie können auch eine Verbindung für jede zur Laufzeit erstellte/abgefragte Modellinstanz angeben
$user = new User;
$user->setConnection('another_connection');
$user1 = $user->find(1);
Aber andererseits halte ich persönlich das für keine gute Idee, und es scheint mir, dass alles sehr schnell unordentlich werden und auseinanderfallen kann, wenn Ihre Anwendung an Komplexität zunimmt.
Danke für deine Antwort, ich habe versucht, die zu ändern connection
-Eigenschaft in der Methode des Modells, aber mit der connection
Methode an der DB-Fassade hat es geschafft. Um einen gültigen Anwendungsfall zu erarbeiten: Ich erstelle ein kleines System, das überprüft, ob alle Daten korrekt zugeordnet sind. Diese Anforderung stellte sich ein, als ich auf der Seite der Berichterstattung Freitexteingabemöglichkeiten für Benutzer und mich selbst erlebte. Alle Anwendungsdaten werden in einer MySQL-Datenbank gespeichert, aber ich muss den SQL-Server abfragen, um zu überprüfen, ob meine – in MySQL – gespeicherten Abfragen auf der Produktionsseite in Schwierigkeiten geraten.
– Ben Fransen
20. April 2016 um 11:27 Uhr
Ich persönlich bin dagegen, den Anschluss zu wechseln. Und ich komme nicht auf die Idee, Daten nach dem Speichern zu validieren, Daten sollten vor dem Speichern validiert werden.
– Mina Abadir
8. Juni 2016 um 14:27 Uhr
Danke, nur fürs Protokoll, nicht nur DB
aber auch Schema
hat eine Verbindungsfunktion, es funktioniert so: Schema::connection('pgsql_admin')->create(
– Jewgenij Afanasjew
5. März 2018 um 5:31 Uhr
Sie können es seit Laravel 5.x oder 6.x so ändern
config(['database.default' => 'databasename']);
Wo databasename
muss in angegeben werden config/database
in dem connections
Reihe.
Dies ist der Weg, es zu tun. Die Datenbankverbindung muss definiert werden. Es scheint, dass NUR das Ändern des Datenbanknamens für die ‚mysql‘-Verbindung nicht immer funktioniert
– Krabbenwagen
11. August 2020 um 21:42 Uhr
Wir haben ein ähnliches Szenario, wo wir nach historischen Daten suchen, wir ändern die Datenbank. Wir verwenden im Modell Folgendes:
public function inventory($db, $id) {
return DB::table($db . '.inventory')->where('inventoryid', $id)->get();
}
und dann senden wir im Code die $db als Parameter:
$inventory = Inventory::inventory('data_2016', 2);
Auf diese Weise müssen Sie die Verbindung nicht für jede der verschiedenen Datenbanken definieren und nicht an den Datenbankkonfigurationsdateien herumbasteln.
Der einzige Nachteil ist, dass Sie das Modell nicht direkt verwenden können, sondern den DB-Helfer verwenden müssen.
Dieser Link wird helfen fideloper.com/laravel-multiple-database-connections
– imsheth
25. Juni 2015 um 5:43 Uhr