Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie greife ich in Laravel auf eine BelongsToMany-Beziehung über mehrere Datenbanken hinweg zu?

Barbara Streisand
Freigeben: 2024-11-03 07:53:03
Original
626 Leute haben es durchsucht

How to Access a BelongsToMany Relationship Across Multiple Databases in Laravel?

Zugriff auf eine BelongsToMany-Beziehung über mehrere Datenbanken in Laravel hinweg

Beim Arbeiten mit Modellen, die in verschiedenen Datenbanken gespeichert sind, kann es zu Problemen mit der BelongsToMany-Beziehung von Laravel kommen wenn sich die Pivot-Tabelle nicht in derselben Datenbank wie das Zielmodell befindet. Um dies zu umgehen, ist es notwendig, den Datenbanknamen der Pivot-Tabelle explizit anzugeben.

Ändern Sie dazu die „gehörtToMany“-Beziehung im Modell, das die Pivot-Tabelle enthält, wie folgt:

<code class="php">public function bs()
{
    $database = $this->getConnection()->getDatabaseName();
    return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id');
}</code>
Nach dem Login kopieren

Dieser Ansatz stellt sicher, dass Laravel in der Datenbank nach der Pivot-Tabelle sucht, die dem Modell entspricht, das die Beziehung enthält, und so das Problem löst.

Wenn Ihr Projekt jedoch SQLite-Datenbanken verwendet und Sie beabsichtigen, Komponententests durchzuführen, sind zusätzliche Überlegungen erforderlich sind notwendig. SQLite erfordert das Anhängen der Zieldatenbank an die Testverbindung, um den Zugriff auf die Pivot-Tabelle zu erleichtern. Dies kann mit dem folgenden Code erreicht werden:

<code class="php">public function bs()
{
    $database = $this->getConnection()->getDatabaseName();
    if (is_file($database)) {
        $connection = app('B')->getConnection()->getName();
        $name = $this->getConnection()->getName();
        \Illuminate\Support\Facades\DB::connection($connection)->statement("ATTACH DATABASE '$database' AS $name");
        $database = $name;
    }
    return $this->belongsToMany('B', "$database.a_bs", 'a_id', 'b_id');
}</code>
Nach dem Login kopieren

Es ist wichtig, auf die Transaktionsnutzung zu achten. Wenn die aktuelle Verbindung Transaktionen verwendet, schlägt die ATTACH DATABASE-Anweisung fehl. Wenn umgekehrt die zugehörige Verbindung Transaktionen verwendet, werden die resultierenden Daten vor der aktuellen Verbindung verborgen.

Um Ihre angehängte Datenbank zu bereinigen, können Sie entweder einen Migrations-Rollback durchführen oder die Tabellen unter Beibehaltung ihrer Struktur kürzen.

Zu den weiteren Optionen gehören das Kopieren der angehängten Datenbank in eine temporäre Datei und das Ersetzen der Quelle nach dem Test oder die Nutzung der leicht zugänglichen Natur von SQLite-Datenbankdateien.

Das obige ist der detaillierte Inhalt vonWie greife ich in Laravel auf eine BelongsToMany-Beziehung über mehrere Datenbanken hinweg zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage