====== n:m-Verknüpfung zwischen Tabellen (belongsToMany) ======
**Problemstellung:**
* Ein Spielschein kann an mehreren Gewinnziehungen teilnehmen (z. B. 5 Wochen Laufzeit = 5 Ziehungen)
* An einer Gewinnziehung können mehrere Spielscheine teilgenommen haben
**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.