首页 > 解决方案 > 此集合实例上不存在属性。(Laravel 6)

问题描述

<td>我有一个在我的表上添加行的 for 循环。问题是,我无法访问我的 Schedule 模型的属性,它一直给我

此集合实例上不存在属性 [date_of_shift]。

    <table class="table table-bordered table-responsive">
        <thead>
        <th>Employee</th>
        <!-- Format of date_of_shift field: format('Y-m-d') -->
        @for ($i = 0; $i < 7; $i++)
            <th>
                {{ \Carbon\Carbon::today()->addDays($i)->format('F j, Y') }}<br />
                {{ \Carbon\Carbon::today()->addDays($i)->format('D') }}
            </th>
        @endfor
        </thead>
        <tbody>
        @foreach ($employees as $employee)
            <tr>
                <td>{{ $employee->user->last_name }}, {{ $employee->user->first_name }} {{ $employee->user->maiden_name }} </td>
                @for ($j = 0; $j < 7; $j++)
                    @if ( $employee->schedule->date_of_shift == \Carbon\Carbon::today()->addDays($j)->format('Y-m-d') )
                        <td>{{ $employee->schedule->time_of_shift }}</td>
                    @else
                        <td><strong>REST DAY</strong></td>
                    @endif
                @endfor
            </tr>
        @endforeach
        </tbody>
    </table>

员工.php

public function schedule () {
    return $this->hasMany('App\Schedule');
}

附表.php

public function employee () {
    return $this->belongsTo('App\Employee');
}

什么是解决方法?

标签: laravel

解决方案


由于您的关系是返回集合HasMany$employee->schedule一个实例,因此在您的情况下,您可以做的最简单的事情就是获取->first()集合的结果......

@if ( $employee->schedule->first()->date_of_shift == \Carbon\Carbon::today()->addDays($j)->format('Y-m-d') )
    <td>{{ $employee->schedule->first()->time_of_shift }}</td>
@else
    <td><strong>REST DAY</strong></td>
@endif

或者

或者不要更改刀片中的任何代码,而是将您的关系HasManyHasOne

public function schedule () {
    return $this->hasOne('App\Schedule');
}

推荐阅读