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