#php #arrays #laravel #eloquent
#php #массивы #laravel #красноречивый
Вопрос:
Я совсем новичок в Laravel. Я знаю, как я мог бы это сделать, но не уверен, что это лучший метод. У меня есть система элементов, называемых «Потоками». Каждый из них принадлежит определенной «FlowCategory». Я хотел бы получить все элементы «FlowCategory», а затем связанные с ними дочерние элементы («потоки») с помощью контроллера и передать это в представление.
В нужном мне представлении будет показан список каждой категории потоков и связанных с ней потоков.
Я настроил Eloquent, и у двух элементов есть взаимосвязь. Я создал цикл foreach в контроллере и создал массив вручную, но я уверен, что он правильный.
foreach ($cats as $cat) {
$catid = $cat->id;
$flows[$catid] = AppFlowCategory::find($catid)->flows;
}
Комментарии:
1. Если категория принадлежит категории потока, то вам следует взглянуть на Eloquent relationship здесь
2. Спасибо за ваш комментарий. Я уже установил красноречивую взаимосвязь между категориями и самими потоками. Это работает хорошо. Но я не уверен, как передать данные в представление с каждой категорией и связанными с ней элементами
Ответ №1:
Хорошо, может быть, вам стоит сделать что-то подобное. Но просто для обновления концепции:
- Потоки
belongsTo
Категория потока - Категория потока
hasMany
Flows.
Ваши модели:
Категория потока:
public function flows()
{
return $this->belongsTo('AppFlow', 'category_id');
}
Поток:
public function flowCategory()
{
return $this->hasMany('AppFlowCategory');
}
То есть, если вы хотите отобразить в своем представлении все категории потоков с их соответствующими элементами, вы можете поступить следующим образом:
FooController.php
public function bar() {
// "with" is to avoid N 1 query problem
$flowsCategories = FlowCategory::with('flows')->get();
return view('yourview', compact('flowsCategories'));
}
И затем, чтобы отобразить items
в вашем представлении, для каждого category
вы можете сделать вот так:
@foreach($flowsCategories as $flowCategory)
@foreach($flowCategory->flows as $flow)
Flow: {{ $flow->name }} – Flow Category: {{ $flowCategory->name }}
@endforeach
@endforeach