/ / Laravel eloquent Verknüpfung von Modellen zur Anzeige von Daten - laravel, eloquent

Laravel eloquent Verknüpfung durch Modelle zur Anzeige von Daten - Laravel, eloquent

Dies ist eine Anfängerfrage. Ich habe ein Bereichsmodell und ein Unterbereichsmodell. Ein Gebiet hat viele Untergebiete, und ein Untergebiet gehört zu einem Gebiet. Ich versuche, die Modelle zu verknüpfen (unsicher über die korrekte Terminologie) und alle Unterbereiche für einen Bereich zu finden.

Das sind meine Modelle.

class Area extends Model
{
public function subarea()
{
return $this->hasMany(Subarea::class);
}
}

class Subarea extends Model
{
public function area() {
return $this->belongsTo(Area::class);
}
}

In einem Controller mache ich

public function index()
{
$areas = Area::all();

return view("area.area", compact("areas"));
}

In einer Ansicht

@foreach($areas->subareas as $subarea)
{{ $subarea->subarea_name }}
@endforeach

In Schienen kann ich Folgendes tun, und es funktioniert,

<% areas.subareas.each do |subarea| %>
<tr>
<td><%= subarea.subarea_name %></td>
</tr>
<% end %>

Kann jemand aufzeigen, was ich hier falsch mache?

Auch als Bonusfrage. Gibt es einen besseren Ort, um alle Bereiche zu erreichen und der Aussicht zu übergeben? Ich habe die Abfrage im Modell, von der ich weiß, dass sie schlechte Praxis ist. Weiß jemand, wo ich es stattdessen setzen sollte?

Vielen Dank!

Aktualisieren

Dies ist der Fehler, den ich erhalte

Nicht definierte Eigenschaft: IlluminateDatabaseEloquentCollection :: $ Unterbereich

Antworten:

1 für die Antwort № 1

Versuchen Sie, die Schleife zu ändern:

@foreach($areas as $area)
//subarea singular (the relation name)
@foreach($area->subarea as $subarea)
{{ $subarea->subarea_name }}
@endforeach
@endforeach

Um eine bessere Leistung zu erzielen, müssen Sie die Eifer laden subareas:

$areas = Area::with("subarea")->get();