Laravel Relationship

Beispiel Beziehung von einzelnen Einträgen innerhalb eines Models(Tabelle)  

Durch das Hinzufügen von "parent_id" kann innerhalb einer Tabelle eine Beziehung zu einem anderen Eintrag hergestellt werden.

Ein Eintrag kann also mehrere Child-Einträge haben, diese bekommen als parent_id die id des ursprünglichen Eintrags. Dadurch können verschachtelte Abhängigkeiten (nested) abgebildet werden. Ein Eintrag kann also abhängig von einem Parent sein und selbst der Parent für mehrere Child-Einträge sein.

Tabellenlayout

Tabelle hashtags; Spalten: id, parent_id, name,created_at

Model

Im Model können die Beziehungen wie folgt hinterlegt werden: 

Ein Eintrag kann mehrere childs haben, bzw. einen oder mehrere Parents:

public function parent() {
    return $this->belongsTo('App\Hashtag','parent_id');
}
        
public function childs() {
    return $this->hasMany('App\Hashtag','parent_id','id')->orderBy('created_at'); 
}

Controller: Eager Loading Specific Columns, nested: Parent and Child

Um die Beziehungen in der Abfrage im Controller gleich zu laden, kann folgendes Beispiel verwendet werden:

Hashtag::where('name','like','%'.$hashtag.'%')->select(['id', 'name','parent_id'])->with('childs.childs:parent_id,name', 'parent:id,name')

ManytoMany mit der gleichen Tabelle

Tabellenlayout

Tabelle hashtags; Spalten: id, name,created_at

Pivot-Tabele hashtag_hashtag; Spalten: id, hashtag_id, parent_id

Model

public function parent() {
    return $this->belongsToMany('App\Hashtag','hashtag_hashtag','hashtag_id','parent_id'); 
}
        
public function childs() {
    return $this->hasMany('App\Hashtag','parent_id','id')->orderBy('created_at'); 
}

Sync

Hashtag::where("name","Windows Batch")->first()->parent()->sync(Hashtag::where("name","Windows")->first())
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 02.08.2019 von Bernhard
geändert am 04.08.2019 von Bernhard



Fragen / Kommentare


Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Außerdem geben wir Informationen zu Ihrer Nutzung unserer Website an unsere Partner für soziale Medien, Werbung und Analysen weiter. Details anzeigen.