Laravel foreach有多个物体?

问题描述 投票:1回答:5

我有一个从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。

php laravel foreach
5个回答
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

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
投票

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建立一个实际的关系。使用起来会容易得多。


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
投票

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

在控制器中:

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

$combo = [$appts, $agents]

然后,

@foreach($combo as $individualquery)
    @foreach($individualquery as $whatever)
       {{ $whatever->thing }}
    @endforeach
@endforeach
© www.soinside.com 2019 - 2024. All rights reserved.