/ / Laravel eloquente che collega i modelli per visualizzare i dati: laravel, eloquente

Laravel eloquente che collega i modelli per visualizzare i dati: laravel, eloquente

Questa è una domanda per principianti. Ho un modello Area e un modello Subarea. Un'area ha molte sottoaree e una sottozona appartiene a un'area. Sto cercando di collegare i modelli (incerto sulla terminologia corretta) e trovare tutti i sotto-settori per un'area.

Questi sono i miei modelli

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 un controller, sto facendo,

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

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

In una vista,

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

In rotaie sono in grado di fare quanto segue, e funziona,

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

Qualcuno è in grado di indicare cosa sto facendo male qui?

Inoltre, come domanda bonus. C'è un posto migliore per ottenere tutte le aree e passarlo alla vista? Ho la domanda nel modello, che conosco è una cattiva pratica. Qualcuno sa dove dovrei metterlo, invece?

Grazie!

Aggiornare

Questo è l'errore che sto ottenendo

Proprietà non definita: IlluminateDatabaseEloquentCollection :: $ subarea

risposte:

1 per risposta № 1

Prova a cambiare il ciclo per:

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

Per prestazioni migliori, è necessario caricare il subareas:

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