【问题标题】:Call to a member function pluck() on null在 null 上调用成员函数 pluck()
【发布时间】:2019-03-18 22:30:33
【问题描述】:

我有一个问题和错误:

这是错误:

在 null 时调用成员函数 pluck()

    protected function setCourseTime($episode)
{
    $course = $episode->course;
    $course->time = $this->getCourseTime($course->episodes->pluck('time'));
    $course->save();
}

protected function getCourseTime($times)
{
    $timestamp = Carbon::parse('00:00:00');
    foreach ($times as $t) {
        $time = strlen($t) == 5 ? strtotime('00:' . $t) : strtotime($t);
        $timestamp->addSecond($time);
    }
    return $timestamp->format('H:i:s');
}

}

感谢您的帮助

Laravel 版本:5.7 php版本:7.0.2

【问题讨论】:

  • 向我们展示您与模特的关系

标签: laravel laravel-5 eloquent laravel-5.7


【解决方案1】:

确保您的关系定义类似于:

public function episodes()
{
    return $this->hasMany(Episode::class);
}

如果您在此处错过return$course->episodes 将返回null,因此不可能在 null 上运行 pluck

【讨论】:

  • 感谢您的回答。但这不是我的问题,我的关系就像你的代码!
【解决方案2】:

首先确保您已在课程模型上定义了“情节”关系。

注意这一点。 $course->episodes 将从数据库中获取剧集作为“集合”。

但如果您只需要剧集的time,请直接从数据库中过滤它们。

你应该做的是$course->episodes() 注意括号
这将称为“情节”关系。那么你可以拨打pluck()

$course->episodes()->pluck('time')

【讨论】:

  • 这不是真的。 Collection 中有pluck 方法:laravel.com/docs/5.7/collections#method-pluck,如果有结果就会运行这个方法
  • @SeyedMasihTabaei 请注意,正如@MarcinNabiałek 指出的那样,您也可以在“集合实例”上调用pluck() 函数。但由于这种方法更有效,我更新了答案
  • 好的,感谢您的高效帮助!(对不起我的英语不好)
猜你喜欢
  • 2019-08-21
  • 2017-08-09
  • 2020-03-10
  • 2017-09-24
  • 2018-02-06
  • 2018-09-29
  • 2018-08-04
  • 2020-03-28
  • 2020-10-28
相关资源
最近更新 更多