2015-01-16 2 views
1

у меня есть competition модели (конкуренция по существу большой формы для заполнения), что hasManygroups (группы полей), которые hasManyfields. Когда пользователь заполняет форму, я создаю одну запись entry, в которой hasMany полевых представлений (называемых элементами). Таким образом, одна запись может выглядеть следующим образом:Laravel петли на основе внутренних значений

id form_id 
------------- 
2  5 

В таблице полевые материалы (элементы) может выглядеть следующим образом:

id entry_id field_id value 
---------------------------------- 
1  2   2   Dave 
2  2   3   30 

Так что, если я бегу:

$entry = Entry::with('elements.field.group')->find($id); 

Я получаю примерно следующее:

{ 
    "id": 16, 
    "competition_id": 1, 
    "elements": [ 
    { 
     "id": 8, 
     "field_id": 1, 
     "entry_id": 16, 
     "content": "F", 
     "field": { 
     "id": 1, 
     "name": "gender", 
     "label": "Gender", 
     "type": "radio", 
     "group_id": 1, 
     "group": { 
      "id": 1, 
      "order": 1, 
      "competition_id": 1 
     } 
     } 
    }, 
    { 
     "id": 9, 
     "field_id": 2, 
     "entry_id": 16, 
     "content": "fds", 
     "field": { 
     "id": 2, 
     "name": "name", 
     "label": "Your name", 
     "type": "text", 
     "group_id": 1, 
     "group": { 
      "id": 1, 
      "order": 1, 
      "competition_id": 1 
     } 
     } 
    } 
    ] 
} 

Чтобы отобразить их, я бы хотел в идеале сделать @foreach($groups as $group), но группы существуют только в element->field->group. Как я могу провести реорганизацию массива, чтобы это можно было сделать? Есть ли способ перестроить массив изнутри? Или есть способ сортировки данных, поскольку я беру его из Laravel?

ответ

0

Может быть, это работает:

$groups = Group::with('fields.element.entry')->whereHas('field.element.entry', function($q) use ($id){ 
    $q->where('entries.id', $id); 
})->get(); 
Смежные вопросы