In diesem Beispiel legen wir eine Tabelle Spielscheine und eine Tabelle Spielfelder an, wobei jedem Spielschein beliebig viele Spielfelder zugeordnet werden kann. Beim Anlegen ist die Reihenfolge wichtig: Zuerst den Spielschein, damit dieser bereits vorhanden ist wenn das Spielfeld auf auf den Spielschein referenziert.
php artisan make:migration create_spielscheine_table
Wir erweitern die up-Funktion in der neu unter „\dtabase\migrations“ angelegte Datei:
public function up() { Schema::create('spielscheine', function (Blueprint $table) { $table->bigIncrements('id'); $table->enum( 'Spiel', array( 'Lotto', 'Eurojackpot', 'Keno', 'GlücksSpirale' ) ); $table->string( 'Name', 50 ); $table->string( 'Losnummer', 7 ); $table->tinyInteger( 'Wochentage' ); $table->boolean( 'Spiel_77' ) ->default( 0 ); $table->boolean( 'Super_6' ) ->default( 0 ); $table->boolean( 'GluecksSpirale' ) ->default( 0 ); $table->boolean( 'Plus_5' ) ->default( 0 ); $table->timestamps(); }); }
Wir erweitern die Klasse der neu angelegten Datei „App\Spielschein.php“ um den Namen der Tabelle:
protected $table = 'spielscheine'; public function Spielfelder() { return $this->hasMany( 'App\Spielfeld' ); }
php artisan make:migration create_spielfelder_table
public function up() { Schema::create('spielfelder', function (Blueprint $table) { $table->bigIncrements('id' ); $table->bigInteger( 'spielschein_id' ) ->unsigned(); $table->foreign( 'spielschein_id' ) -> references( 'id' ) -> on( 'spielscheine' ) -> onDelete( 'cascade' ); $table->tinyInteger( 'Zahl_1' ); $table->tinyInteger( 'Zahl_2' ); $table->tinyInteger( 'Zahl_3' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_4' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_5' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_6' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_7' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_8' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_9' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Zahl_10' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Eurozahl_1' ) ->nullable( true ) ->default( NULL ); $table->tinyInteger( 'Eurozahl_2' ) ->nullable( true ) ->default( NULL ); }); }
Wichtiger Hinweis: Die Spalte für den Fremdschlüssel muss vom gleichen Typ sein wie die Spalte in der Fremdtabelle: Wenn also die „id“ vom Typ „bigIncrement“ ist muss der Fremschlüssel vom Typ „bigInteger“ sein. Ist die „id“ hingegen vom Typ „increments“ muss der Fremdschlüssel mit „integer“ angegeben werden.
Weitere Erläuterungen zum Fremdschlüssel:
php artisan make:model Spielfeld
Die in „App\Spielfeld.php“ neu erstellte Klasse muss lediglich um den Namen der Tabelle erweitert werden:
protected $table = 'spielfelder';