Laravel Foreign Key – Fremdschlüssel anlegen

Es ist wichtig zu verstehen, was das Konzept hinter einem Fremdschlüssel ist. Es ist kein Hexenwerk. Im Gegenteil es ist super simpel, aber manche wollen es nicht verstehen. Fremdschlüssel sind Bindeglieder zwischen Tabellen, die zeigen, dass die Daten zusammengehören obwohl sie in zwei unterschiedlichen Tabellen liegen.

Wir haben zwei Tabellen. Einmal eine Customers Tabelle (id, name, mail) und eine Orders Tabelle (id, customer_id, status). In beiden Tabellen soll die id ein Primärschlüssel sein. Ein Primärschlüssel ist einzigartig (unique) sowie kurz. Kurz weil es auch zusammengesetzte Primärschlüssel geben kann, die sehr lang werden können. Um das zu vermeiden, ist es am besten mit einem Integer der sich selbst inkrementiert zu arbeiten. Das ist quasi Standard.

Datenbank Relation zwischen Customers und Orders über Fremdschlüssel

Nun legen wir den Fremdschlüssel in Tabelle Orders auf customer_id. Somit wären die beiden Tabellen über die customer_id Verknüpft. Das erscheint auf dem ersten Blick als unnötig. Aber bei größeren Datenmengen oder komplexeren SQL Abfragen, wirkt sich der FK positiv und sehr erheblich auf die Abfragegeschwindigkeit aus.

Wie gehen wir in Laravel vor?

Als erstes legen wir die zwei Tabellen Customers und Orders an. Dazu bedien wir uns dem Laravel Komandozeilen Comand artisan.

php artisan make:migration create_customers_table
php artisan make:migration create_orders_table

Dann gehen wir zu den zwei neu angelegten Migrations PHP Dateien. Diese findest Du im Ordner: Database/Migrations. Die aktuelle Namenskovention der Migrationbs Dateien ist:

2020_06_10_114815_create_customers_table (YYYY_MM_DD_iiiiii_add_{name_name}_table)

In einer neu angelegten Migrations findest Du immer die zwei Methoden up und down. Hier die Customers.

...
public function up()
{
        Schema::create('customers', function (Blueprint $table) {
            #$table->id();
            $table->increments("id");            
            $table->string('name',20);
            $table->string('email',20);
}

public function down()
{
     Schema::dropIfExists('customers');
}

Nun legen wir eine neue Migrations Datei an. Und nennen diese ForeignKeys. Und statt create machen wir ein add.

php artisan make:migration add_foreign_keys_table

In dieser Datei fügen wir folgenden Code unter up() ein:

...
Schema::table('orders', function (Blueprint $table) {       
    $table->foreign('customer_id')->references('id')->on('customers');
});   
// und unter down() dann diesen Code:

Schema::table('orders', function (Blueprint $table) {            
     $table->dropForeign('orders_customer_id_foreign');                                                           
});

Was ist das up and down eigentlich?

Diese zwei Methoden werden von Laravel benötigt, wenn wir die Schemas in unsere Datenbank migrieren. Up dann für das bauen und down für das löschen, entfernen. Dazu bedienen wir uns dann wieder des artisan Commands:

php artisan migrate 
php artisan migrate:reset

Wichtig, falls es mal mit den Fremdschlüssel am Anfang nicht so klappt und ihr probleme habt die Tabellen unkompliziert zu löschen. Dafür gibt es den artisan befehl: wipe.

php artisan db:wipe

That it!


Leave a Comment

Your email address will not be published. Required fields are marked *

*

*

Empfholende Artikel


Laravel – Service, Repository Pattern

February 6, 2021

Ein wichtiger Baustein der Softwareentwicklung ist die Softwarearchitektur. Ab einer bestimmten Größe steht und fällt, meines Erachtens, ein Projekt mit der Softwarearchitektur. Damit ist nicht gemeint, das prozedural geschriebener Code perse schlecht ist. Im Gegenteil. In der Vergangenheit habe ich mit prozedural geschriebenen Code gute Software gebaut die teilweise bis heute läuft. Ich erinnere mich […]

Laravel Model kurz mal erklärt

January 26, 2021

Heute mal leichte Kost. Laravel Model. Was ist das und was stellt man damit an, wie erstellt man ein Model und was kann es so alles. Genug der langen Worte, fangen wir an! Was ist ein Model? Dafür blicken wir auf ein DesignPattern der Programmierung und zwar dem MVC Muster. MVC steht für Model, View […]

JWT in Laravel einrichten – Kurz mal erklärt

January 19, 2021

Ein sehr großes Topic vor beginn einer neuen Applikation ist die Authentifizierung. Bei der Hypoport AG in Berlin wurde bei einem Projekt ein ganzer Monat mit mehreren Entwicklerteams das Thema Login geplant. In anderen Projekten, die sicher laufen sollen, verhält sich das ähnlich. Deswegen sollte das Thema von Anfang an immer gut durchdacht sein. Erspart […]

Laravel config Datei anlegen

December 1, 2020

Ich musste mal bei einer bestehenden Laravel Installation eine Paypal Integration bei einem Kunden vornehmen. Nebenbei bemerkt möchte ich das mal loswerden. Paypal hat eine schreckliche Dokumentation. Sie ist überhaupt nicht intuitiv. Aber das ist überhaupt ein anderes Thema. Ich installierte im Projekt über den Composer die Paypal SDK: Zusätzlich legte ich mir einen neuen […]

Was ist eigentlich protected $guard im Laravel Model

November 26, 2020

Gleich vorweg! Im Laravel Model gibt es mehrere protected Klassenvariablen die durch die Vererbung von Models bzw. Authenticatable im eigenen Model verfügbar sind. So habt ihr bestimmt schon mit protected $fillable und protected $guarded oder protected $hidden zu tun gehabt? Leicht zu verwechseln mit $guarded ist nun $guard. Allerdings schützt $guarded nur das Model vor […]

Laravel Mass Assignment – kurz erklärt

November 10, 2020

Jeder der mit Laravel und einer Datenbank arbeitet kommt zwangsläufig auf das Thema Mass Assignment. Was ist das eigentlich? Beziehungsweise ihr kennt diese HTTP 500 Fehlermeldung: Add [name] to fillable property to allow mass assignment on [App\Models\Profil]. Stellen wir uns vor wir haben eine Website mit einem geschütztem Dashboard für unsere Nutzer. Ein registrierter Nutzer […]