====== Beispiel für die Tabellenbeziehung 1:n (hasMany) ====== 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. ===== Spielscheine ===== ==== Migration für "Spielscheine" anlegen ==== 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(); }); } ==== Model für "Spielschein" anlegen ==== 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' ); } ---- ===== Spielfelder ===== ==== Migration für "Spielfelder" anlegen ==== 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: * foreign = Fremdschlüssel zur Tabelle "spielscheine", Tabellenspalte "id" anlegen * references = Name der Tabellenspalte * on = Name der Tabelle * onDelete = Wenn der Spielschein geslöcht wird, werden automatisch auch alle zugehörigen Spielfelder gelöscht. ==== Model für "Spielfelder" anlegen ==== 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'; ---- * [[laravel:hasMany_example|Teil 2: Überprüfung, ob die Verknüpfung funktioniert]]