在 Laravel 8 中预先加载后无法访问对象字段

Can't access object field after eager loading in Laravel 8

当我试图用这样的关系急切加载我的模型时:

$plants = Plant::with('history')
    ->get()
    ->where('user_id', auth()->id());

我想用我的函数修改那些提取的日期:

foreach ($plants as $plant) {
        $plant->watered_at = self::getDateForHumans($plant->history->watered_at);
        $plant->fertilized_at = self::getDateForHumans($plant->history->fertilized_at);
    }

我遇到这种错误:

ErrorException Trying to get property 'watered_at' of non-object

但是如果我尝试通过 dd() 函数调试它,我会得到一个肯定的结果

   dd(self::getDateForHumans($plant->history->watered_at));

dd() result

有人知道如何修复它或解决方法是什么吗?

你的历史好像没有watered_at成员,所以才会出现这个错误。

首先检查您是否可以通过

访问该会员
if(isset($plant->history->watered_at)){
    $plant->watered_at = self::getDateForHumans($plant->history->watered_at);
}