Laravel foreach有多个物体?

时间:2014-08-25 17:03:47

标签: php laravel foreach

我有一个从Laravel的DB类返回的对象,我将其传递给我的视图:

    @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中,它显然会迭代多次。

无论如何都要做类似的事情:

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

以上?像这样的多个foreach?或者某种方式来实现这种效果?

或者某种方式将它们合并在一起?他们都是stdClass。

5 个答案:

答案 0 :(得分:2)

这是一个非常古老的问题,但我必须做类似的事情,在互联网上找不到任何东西。

我将第二个@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

答案 1 :(得分: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

答案 2 :(得分:0)

DB :: get()应该返回一个数组,因此您应该可以轻松地使用for循环。它不会那么漂亮,这假设你按照匹配的顺序返回它们,每个appt都有一个代理。

        @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

我不确定你是如何匹配它们的,但我建议在Eloquent建立一个实际的关系。使用起来会容易得多。

答案 3 :(得分: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

答案 4 :(得分:0)

这是一个古老的版本,绝对不是最新版本,但解决方案并不是那么棘手。 (请注意,我的解决方案假设您具有相同的列名。

在控制器中:

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

$combo = [$appts, $agents]

然后,

@foreach($combo as $individualquery)
    @foreach($individualquery as $whatever)
       {{ $whatever->thing }}
    @endforeach
@endforeach