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

Laravel登录后报Attempt to read property "produits" on null错误如何解决?

问题原因

错误Attempt to read property "produits" on null的触发逻辑非常明确:

  • 登录状态下Auth::check()校验通过,进入分支获取到了登录用户实例
  • 该登录用户尚未创建对应的favorie(收藏夹)关联数据,因此$user->favorie返回值为null
  • 代码尝试读取null的produits属性,直接触发报错
  • 未登录状态下走else分支直接返回空数组,不存在属性读取操作,因此运行正常
解决方案

方法1:后端增加空值判断(最快捷)

直接修改后端逻辑,判断收藏夹关联存在后再读取关联商品,不存在则返回空数组:

$currentTime = date("Y-m-d");
if(Auth::check()){
  $user = Auth::user();
  $favorie = $user->favorie;
  $favprds = $favorie ? $favorie->produits : [];
}else{
 $favprds = [];
} 

如果你的运行环境支持PHP7.4及以上版本,可以用null安全运算符进一步简化代码:

$currentTime = date("Y-m-d");
$favprds = Auth::check() ? (Auth::user()->favorie?->produits ?? []) : [];

方法2:新增用户自动创建默认收藏夹(根治问题)

可以在用户注册完成时自动生成默认收藏夹,从根源避免登录用户无收藏夹的情况。在App\Providers\AppServiceProvider的boot方法中新增以下逻辑即可:

use App\Models\User;

public function boot()
{
    User::created(function ($user) {
        $user->favorie()->create();
    });
}

可选优化:简化Blade模板逻辑

你当前的模板用循环判断商品是否在收藏夹的写法效率较低,可直接用Laravel集合的contains方法替换所有循环代码,写法更简洁可读性更高:

@if($favprds->contains('id', $pro->id))
<div class="tinv-wishlist-clear">
    <a style="color:red;" href="{{ url('deleteFavorie/'.$pro->id) }}"><i class="fa fa-heart"></i></a>
</div>
@else
<div class="tinv-wishlist-clear">
    <a style="color:#7f8c8d" href="{{ url('add-to-favorie/'.$pro->id) }}"><i class="klbth-icon-heart-1"></i></a>
</div>
@endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:24:00