/ / Laravel красномовне посилання через моделі для відображення даних - laravel, красномовний

Ларавел красномовно зв'язує через моделі для відображення даних - ларавел, красномовний

Це питання для початківців. У мене є модель «Площа» та «Підрайон». У районі є багато підрайон, а підрайон належить до району. Я намагаюся зв’язатися через моделі (невпевнений у правильній термінології) і знайти всі підрайони для однієї області.

Це мої моделі.

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

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

У контролері я роблю,

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

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

У перегляді,

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

У рейках я можу зробити наступне, і це працює,

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

Хтось може вказати, що я тут роблю неправильно?

Також як питання про бонус. Чи є краще місце, щоб дістати всі ділянки та передати його на вигляд? У мене є запит у моделі, який я знаю, що це погана практика. Хто-небудь знає, куди я повинен її замість поставити?

Дякую!

Оновити

Це помилка, яку я отримую

Не визначене властивість: IlluminateDatabaseEloquentCollection :: $ subarea

Відповіді:

1 для відповіді № 1

Спробуйте змінити цикл на:

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

Для кращої продуктивності потрібно нетерпляче завантажувати subareas:

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