Problemstellung:
Lösung:
Diese n:m-Verknüpfung kann mit Hilfe einer sogenannte Pivot-Tabelle (Verknüpfungstabelle) realisiert werden. Hierbei können unbegrenzt viele Beziehungen zwischen Spielscheinen und Gewinnziehungen hergestellt werden.
Vorgehensweise:
Im ersten Schritt wird die Pivot-Tabelle mit Hilfe eines Artisan-Kommandos erstellt.
php artisan make:migration create_spielschein_ziehung_table
In der PHP-Klasse der Migration fügen wir die beiden Datenbankfelder „spielschein_id“ und „ziehung_id“ hinzu
public function up() { Schema::create('spielschein_ziehung', function (Blueprint $table) { $table->integer( 'spielschein_id' )->unsigned(); $table->foreign( 'spielschein_id' )->references( 'id')->on( 'spielscheine')->onDelete('cascade'); $table->integer( 'ziehung_id' )->unsigned(); $table->foreign( 'ziehung_id' )->references( 'id')->on( 'ziehungen')->onDelete('cascade'); }); }
Model für den „Spielschein“ anlegen
php artisan make:model Spielschein
Model um die Methode „belongsToMany“ erweitern:
class Spielschein extends Model { protected $table = 'spielscheine'; public function Ziehungen() { return $this->belongsToMany( 'App\Ziehung' ); } }
Model für die „Ziehung“ anlegen
php artisan make:model Ziehung
Model um die Methode „belongsToMany“ erweitern:
class Ziehung extends Model { protected $table = 'ziehungen'; public function Spielscheine() { return $this->belongsToMany( 'App\Spielschein' ); } }
Verknüpfung zwischen den beiden Objekten erstellen
Um jetzt zwei Objekte (also einen Spielschein mit einer Ziehung) zu verknüpfen brauchen wir nur noch eine PHP-Zeile zu integrieren. Um den Eintrag in die Pivot-Tabelle kümmert sich Laravel im Hintergrund ganz automatisch.
$spielschein->Ziehungen()->save( $ziehung );
Über die neuen von uns erstellten Funktionen „Ziehungen()“ und „Spielscheine()“ können wir im jeweils anderem Model die benötigten Daten aus der Datenbank auslesen.