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



Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Mehr Details