laravel - Laravel - 试图获取非对象的属性文本
问题描述
这是我之前做过一百万次的事情,所以我真的很困惑为什么会出现这个错误。
在我的Controller中,我获取了一些结果:
$modOfSubchanIDs = Auth::user()->modOf->pluck('id')->toArray();
$modmails = ModMail::whereIn('subchan_id', $modOfSubchanIDs)
->with('subchan')
->with('creator')
->with('appeal')
->orderBy('created_at', 'desc')
->paginate(10);
然后在Blade中,我尝试输出以下关系的结果:
@foreach ($modmails as $modmail)
<div>
{{$modmail->appeal->text}}
</div>
@endforeach
Modmail型号关系:
public function appeal()
{
return $this->belongsTo(SubchanBanAppeal::class, 'appeal_id');
}
但我收到以下错误:
ErrorException 试图获取非对象的属性“文本”
奇怪的。所以我试着
<div>
{{$modmail->appeal}}
</div>
它在 Blade 中返回以下内容:
{"id":1,"subchan_id":8,"subchan_ban_id":1,"text":"test","denied":0,"created_by":5003,"created_at":"2021-03-26T00: 07:58.000000Z","updated_at":"2021-03-26T00:07:58.000000Z"}
所以现在我真的很困惑。为什么它会正确返回,但当我尝试特定列时却没有?我也尝试过{{$modmail->appeal['text']}}
,但这会返回
尝试访问 null 类型值的数组偏移量
感觉就像我在这里错过了一些非常基本的东西......
解决方案
您是否{{ $modmail->appeal }}
在循环内进行了调试?很可能大多数人$modmails
都有上诉,但一两个人没有。如果它不是第一个丢失的,那么您的测试看起来是正确的。
optional()
辅助方法可以在这种情况下提供帮助。
@foreach ($modmails as $modmail)
<div>
{{ optional($modmail->appeal)->text }}
</div>
@endforeach