You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中读取null对象created_at报错,@forelse无效如何解决?

问题原因

你遇到的错误是因为控制器中$dataBumps[] = ...->first();的写法,不管查询是否返回结果,都会向数组中添加一个元素——如果没有匹配数据,这个元素就是null。此时$dataBumps数组并非空数组,所以@forelse的@empty分支不会触发,循环时访问null->created_at就会抛出错误。

解决方案

方案1:修改控制器,仅在有数据时添加到数组

调整控制器代码,只在查询到结果时才将数据存入数组:

$latestLike = DB::table('server_user_likes')
    ->where('server_id', $server->id)
    ->orderBy('created_at', 'DESC')
    ->first();

if ($latestLike) {
    $dataBumps[] = $latestLike;
}

这样当没有数据时,$dataBumps是空数组,@forelse会进入@empty分支显示-。

方案2:在Blade模板中增加空值判断

如果不想修改控制器,可以在模板中使用PHP的null安全运算符和空合并运算符,直接处理可能的null值:

@forelse ($dataBumps as $dataBump)
    {{ $dataBump?->created_at ?? '-' }}
@empty
    -
@endforelse

$dataBump?->created_at会在$dataBump为null时直接返回null,再通过?? '-'将null替换为-。

方案3:直接传递单个结果(更简洁)

从代码看你只需要最新的一条记录,没必要用数组存储。可以直接传递单个对象到模板:
控制器代码:

$dataBump = DB::table('server_user_likes')
    ->where('server_id', $server->id)
    ->orderBy('created_at', 'DESC')
    ->first();

Blade模板代码:

{{ $dataBump?->created_at ?? '-' }}

这种写法更贴合你的业务需求,避免了数组带来的冗余判断。

内容的提问来源于stack exchange,提问作者CARSAR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:40:25