首页 > 解决方案 > TypeError - count(): 参数 #1 ($var) 必须是 Countable|array 类型,给定 null

问题描述

我从 laravel 开始,我正在尝试制作仪表板,但是当我将此代码添加到 dashboard.blade.php 时(我删除了以前的代码,因为它使用了 Jetstream)给出错误的行:

 @if (count($events) > 0)

代码主体:

 @extends('layouts.main')


 @section('title', 'Dashboard')


 @section('content')



 <div class="col-md-10 offset-md-1 dashboard-title-container">

     <h1>My Events</h1>

 </div>

 <div class="col-md-10 offset-md-1 dashboard-events-container"> /* This is where you will have the list of events*/
     @if (count($events) > 0)
     @else
     <p>You have no events yet, <a href="/events/create">create event</a></p>
     @endif
 </div>

 @endsection

我的 php 是 8.0.7

标签: laravellaravel-blade

解决方案


您似乎缺少events用户模型上的关系。

如果您定义一对多关系,则在访问模型的属性(动态属性)时,您将始终获得一个 Collection。

// User model

public function events()
{
    return $this->hasMany(Event::class);
}

有了它,您可以将关系作为属性访问并将 Collection 传递给您的视图:

return view('events.dashboard', ['events' => auth()->user()->events]);

Laravel 8.x 文档 - 雄辩的关系 - 一对多-hasMany

Laravel 8.x 文档 - 雄辩的关系 - 关系方法与。动态属性


推荐阅读