【问题标题】:Invalid argument supplied for foreach() (View: E:\Codes\Php\Laravel\appoint_now-master\resources\views\staff\scheduler\index.blade.php)为 foreach() 提供的参数无效(查看:E:\Codes\Php\Laravel\appoint_now-master\resources\views\staff\scheduler\index.blade.php)
【发布时间】:2021-04-20 06:37:26
【问题描述】:

我是 laravel 的新手。我需要帮助

当我尝试通过 compact() 方法将数据发送到索引页面时,显示错误

错误

错误异常 为 foreach() 提供的参数无效(查看:E:\Codes\Php\Laravel\appoint_now-master\resources\views\staff\scheduler\index.blade.php)

index.blade.php

 </thead>
                <tbody>
               @foreach($schedules as $s)
                    <tr>
                        <td>{{ $s->name }}</td>
                        <td>{{ $s->created_at }}</td>
                        <td>
                            <div class="btn-group btn-block">
                                <a href="{{ route('staff.scheduler.edit', $s->id) }}" class="btn btn-primary" title="@lang('messages.edit')">
                                    <i class="fa fa-edit fa-fw"></i> @lang('messages.edit')
                                </a>
                            </div>
                        </td>
                    </tr>
                @endforeach
                </tbody>

控制器

public function index()
{
    $user = auth()->guard(GuardType::STAFF)->user();
    $schedules=StaffSchedules::where('staff_id','=',$user->id)->first();
    //dd($schedules);

    return view('staff.scheduler.index',compact('schedules'));
}

路线

 Route::prefix('businessStaffMember')->name('businessStaffMember.')->middleware([GuardType::BUSINESS])->group(function(){
    Route::get('/', [BusinessBusinessStaffMemberController::class, 'index'])->name('index');
    Route::get('/create', [BusinessBusinessStaffMemberController::class, 'create'])->name('create');
    Route::get('/{businessStaffMember}/edit', [BusinessBusinessStaffMemberController::class, 'edit'])->name('edit');
    Route::post('/', [BusinessBusinessStaffMemberController::class, 'store'])->name('store');
    Route::patch('/{businessStaffMember}', [BusinessBusinessStaffMemberController::class, 'update'])->name('update');
});

【问题讨论】:

  • StaffSchedules::where('staff_id','=',$user-&gt;id)-&gt;first(); 您将获得-&gt;first() 时间表。但看起来你想要一个时间表集合。您可以将-&gt;first() 替换为-&gt;get()
  • 好的。它成功了。谢谢..
  • 如果任何答案有帮助,请将其标记为最佳答案,谢谢

标签: laravel


【解决方案1】:

你的问题在这里:

$schedules=StaffSchedules::where('staff_id','=',$user->id)->first();

first() 返回对象

而@foreach 需要数组!!

注意:如果你想在 foreach 中渲染对象,你应该实现迭代器接口,就像我们在下面的 commnets 中的朋友所说的那样

将其更改为以下代码,然后重试:

$schedules=StaffSchedules::where('staff_id','=',$user->id)->get();

【讨论】:

  • 实际上,如果对象实现了Iterator接口,也可以在foreach语句中使用。更多信息在这里https://www.php.net/manual/en/language.oop5.iterations.php
  • 不知道谢谢。但在这种情况下,我认为他实施得不对?问题是在 foreach 中渲染对象
  • 是的,您的回答很有帮助。我只是想提一下 虽然@foreach 需要数组!! 不是 100% 正确的。
  • 是的,我现在将编辑我的答案.. 真的谢谢你
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2021-09-08
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多