laravel Laufzeit der Datenbankverbindung ändern

Lesezeit: 4 Minuten

Benutzeravatar von Arjun
Arjun

Ich muss die Laravel 5-Datenbankverbindung zur Laufzeit ändern.

Hast du eine Ahnung davon?

Bitte teilen Sie mit mir.

Vielen Dank.

Benutzeravatar von NiRR
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

Benutzeravatar von FBidu
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.

1404410cookie-checklaravel Laufzeit der Datenbankverbindung ändern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy