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