首页 > 解决方案 > Laravel 5(自定义)计算年龄(天)的方法不存在

问题描述

有很多类似的问题,但我没有找到我的问题的解决方案,所以这里是问题:

我有一个简单的函数,应该用于计算年龄(以天为单位),列在 SubmissionController 中:

public function agingDate($sub) {
  $to = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $sub);
  $now = Carbon::now();
  $diff_in_days->age = $to->diffInDays($now);

  return $diff_in_days;
}

此外,在同一个控制器中:

public function index() {
  $submission = Submission::orderBy('location_address_state', 'asc')
                                ->get();
  return view('/subs/index', [
        'submission' => $submission
  ]);

}

最后,在我看来,我试图调用这个函数:

 @if($submission)
   @foreach($submission as $sub)
     <p>{{ $sub->created_at->agingDate() }}</p>
   @endforeach
 @endif                          

我收到的消息是“方法agingDate 不存在。(查看:/subs/index”)。为什么我不能访问这个功能 - 它在同一个控制器中?

标签: laravelphp-carbon

解决方案


为了保持关注点分离的完整性,我建议您将您的agingDate()方法移动到您的submission模型中。

因此,在您的Submission模型中,您可以通过以下方式对其进行重构:

public function agingDate() {
  $to = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $this->created_at);
  $now = Carbon::now();
  return $to->diffInDays($now);
}

在您的刀片文件中,您应该可以调用:

@if($submission)
   @foreach($submission as $sub)
     <p>{{ $sub->agingDate() }}</p>
   @endforeach
 @endif  

您当前使用的方法不起作用,因为您试图在 Submission 实例的普通属性上调用老化方法。


推荐阅读