2014-08-25 3 views
1

У меня есть объект, возвращаемый из класса DB Laravel, что я перехожу на мой взгляд:Laravel foreach с mutliple объектами?

@foreach ($appts as $appt) 
     <tr> 
      <td> {{ $appt->carrier }} </td> 
      <td> {{ $appt->carrier }} </td> 
      <td> {{ $appt->name }} </td> 
      <td> {{ Format::up($appt->lines_of_authority_c) }} </td> 
      <td> {{ Format::under($appt->status_c) }} </td> 
      <td> {{ Format::date($appt->effective_date_c) }} </td> 
     </tr> 
    @endforeach 

Кроме меня есть еще один объект, мне нужно перебрать, но если я включаю его под текущим Еогеаспом, очевидно, итерируют несколько раз ,

Есть в любом случае, чтобы сделать что-то вроде:

@foreach($appts as $appt, $agents as $agent)

выше? Несколько таких проработок? Или каким-то образом добиться этого эффекта?

Или какой-либо способ объединить их вместе? Они оба stdClass.

Спасибо.

ответ

0

вы можете вложить их так:

@foreach ($appts as $appt) 
    @foreach ($agents as $agent) 
     <tr> 
      <td> {{ $appt->carrier }} </td> 
      <td> {{ $appt->carrier }} </td> 
      <td> {{ $appt->name }} </td> 
      <td> {{ Format::up($appt->lines_of_authority_c) }} </td> 
      <td> {{ Format::under($appt->status_c) }} </td> 
      <td> {{ Format::date($appt->effective_date_c) }} </td> 
     </tr> 
    @endforeach 
@endforeach 
+0

Это было бы итерацию каждого агента каждый раз, когда он перебирает через один APPT. – user3158900

+0

Вызвал бесконечный цикл. –

+0

@ user3158900 точно ... Мне это не нужно делать. –

0

DB :: получить() должен быть возвращающий массив, так что вы легко сможете использовать цикл. Это будет не так красиво, и предполагается, что вы возвращаете их обоих в порядке, в котором они совпадают, и у каждой аптеки будет один агент.

 @for ($i=0; $i < count($appts); $i++) 
      <tr> 
       <td> {{ $appt[$i]['carrier'] }} </td> 
       <td> {{ $appt[$i]['name'] }} </td> 
       <td> {{ Format::up($appt[$i]['lines_of_authority_c']) }} </td> 
       <td> {{ Format::under($appt[$i]['status_c']) }} </td> 
       <td> {{ Format::date($appt[$i]['effective_date_c']) }} </td> 
       <td> {{ $agent[$i]['name'] }} </td> 
      </tr> 
     @endfor 

Я не знаю, как вы сопоставляя их, но я хотел бы рекомендовать создание фактических отношений в красноречив, хотя. С этим было бы намного легче работать.

+0

Если бы массивная устаревшая база данных и, к сожалению, использование ORM не было вариантом. DB :: get() возвращает объекты из-за моих настроек. Поскольку он так долго это делал, я не могу изменить его в системе, мне пришлось бы все отредактировать. Я могу просто преобразовать его в массив, не так ли? –

+0

Этот ответ отключается после последнего апплета, пока есть все еще агенты. –

+0

Есть ли причина, по которой вы не можете проходить через апплеты, а затем через агентов? Почему они должны выполняться в одном цикле? – user3158900

0

В качестве решения первых, вы можете объединить два массива с помощью функции array_merge():

<?php $result = array_merge($appts->toArray(), $agents->toArray()); ?> 

Примечание: Для получения array из stdClass, вы должны использовать toArray()method.

Важно: Если у вас есть одинаковые ключи в массивах, и вы хотите иметь оба, вы должны использовать array_merge_recursive() вместо array_merge().

Затем вы можете использовать @foreach:

@foreach ($result as $data) 
    <tr> 
     <td>{{ $data->property }}</td> 
    </tr> 
@endforeach 
+0

Я получаю сообщение об ошибке «Undefined index: key here». –

+0

@walterjones Я обновил свой ответ, вы должны преобразовать 'stdClass' в' array'. то есть '$ appts-> to_array()' и '$ agents-> to_array()' перед их слиянием –

+0

Я уже сделал это перед комментарием. –

1

Это очень старый вопрос, но я должен был сделать что-то подобное и не мог найти что-либо в Интернете.

Я положил второй @foreach внутри элемента <td>, который мне нужен. Что-то вроде этого.

@foreach($cars as $car) 
      <tr> 
       <td>{!! $car->number !!}</td> 
       <td>{!! $car->color !!}</td> 
       <td>{!! $car->time_of_rent!!}</td> 
       <td> 
        @foreach($clients as $client) 
         @if($client->rented_car === $car->id) 
          {!! $client->name !!} 
         @endif 
        @endforeach 
       </td> 

      </tr> 
    @endforeach 
0

Это древний, и определенно не последняя версия, но решение не так сложно. (Помните, мое решение предполагает, что у вас одинаковые имена столбцов.)

В контроллере:

$appts = [Query Here] 
$agents = [Query Here] 

$combo = [$appts, $agents] 

Затем

@foreach($combo as $individualquery) 
    @foreach($individualquery as $whatever) 
     {{ $whatever->thing }} 
    @endforeach 
@endforeach 
Смежные вопросы