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())
{{percentage}} % positiv