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 № 1Versuchen 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();