2017-06-06 7 views
0

Ich habe zwei Tabellen in meinem Modell: - Gruppen (id, name, category_id) - Kategorien (id, name)Laravel 5.4 one to many Beziehung

Ich würde eine Liste meiner Ansicht nach zeigen müssen mit jeder Gruppenname und seine entsprechende Kategorie. Könnten Sie mir bitte zeigen, wie ich die redegewandte Methode bevölkern kann und was brauche ich auch auf der Betrachtungsseite?

Das ist, was ich bisher haben aber natürlich funktioniert nicht

- GroupController

`  public function index() 
{ 
    $groups = Category::find(1); 

    return view('groups.groups',compact('groups')); 
} 

- Gruppe
public function category() { return $this->belongsTo('App\Category'); }

- CategoryController

`  public function groups() 
{ 
    return $this->hasMany('App\Group'); 
}` 

- Cate blutige

`  public function groups() 
{ 
    return $this->hasMany('App\Group'); 
}` 

- Ansicht

@foreach($groups as $group) {{$group->category}} {{$group->category->name}} @endforeach

Dank !!

+0

Did Sie definieren die Beziehungen in den Modellen? https://laravel.com/docs/5.4/eloquent-relations – Robert

+0

Ja Ich habe gerade die Antwort bearbeitet und die Beziehungen in beiden Controllern – simo93

+0

hinzugefügt. Sie sollten die Beziehungen in den Modellen erstellen, nicht die Controller. – Robert

Antwort

0

Eine wäre leicht Ansatz seiner Eloquent eifrigen Laden: https://laravel.com/docs/4.2/eloquent#querying-relations

Group::with('category')->get() 

Zum Beispiel:

 # Loop through all groups 
     foreach(Group::with('category')->get() as $group){ 
     #get group name 
     print $group->name; 

     #get all categories related to this group 
     $categories = $group->category; 
     foreach ($categories as $category){ 
      print $category->name; 
     } 
     print "<br>"; 
    } 
0

ich es endlich. Im GroupsController hinzugefügt, um diese

´ 
    $groups = Group::with('category')->get(); 

    return view('groups.groups',compact('groups')); 

' und in der Ansicht: @foreach($groups as $group) {{$group->category->name}}

Dank für Ihre Hilfe auf meine Kommentare

0

Following, was Sie wollen, ist die folgende:

Modelle + Relationen:

Gruppenmodell

public function category() 
{ 
    return $this->belongsTo(Category::class); 
} 

Kategorie Modell

public function groups() 
{ 
    return $this->hasMany(Group::class); 
} 

Dann in Ihrer Gruppe Controller:

public function index() 
{ 
    // consider using paginate() instead of get() 
    // using with('category') to eagerload the category (1 extra query) instead of querying for the category in the views foreach loop. 
    $groups = Group::with('category')->get(); 

    return view('groups.groups',compact('groups')); 
} 

Und Ihrer Ansicht nach können Sie nun die Gruppen und ihre Kategorieliste:

@foreach ($groups as $group) 
    {{-- Assuming group and category have a name and category is always set --}} 
    {{ $group->name }} : {{ $group->category->name }} 
@endforeach 
+0

danke Robert du bist der Beste :) – simo93