Laravel错误:Call to a member function format() on string

数据表有个expired_at字段,数据是这样的:


    public function store(Request $request)
    {
        $data=[
             'expired_at'=>Carbon::now()->addDays($publishing_days)->endOfDay()
        ];
        $article=Article::create(array_merge($request->all(),$data));
        
        return redirect('/artilces');
    }

view:

{{$article->expired_at->format('Y-m-d')}}

error:

Call to a member function format() on string (View: D:\wnmp\www\laravel-5-3-dev\resources\views\artiles\index.blade.php)

怎么回事?

阅读 10.1k
3 个回答

在model类中这样操作 ` /**

 * 获取当前时间
 *
 * @return int
 */
public function freshTimestamp()
{
    return time();
}

/**
 * 避免转换时间戳为时间字符串
 *
 * @param DateTime|int $value
 * @return DateTime|int
 */
public function fromDateTime($value)
{
    return $value;
}

/**
 * select的时候避免转换时间为Carbon
 *
 * @param mixed $value
 * @return mixed
 */

// protected function asDateTime($value) {
// return $value;
// }

/**
 * 从数据库获取的为获取时间戳格式
 *
 * @return string
 */
public function getDateFormat()
{
    return 'U';
}`

这个错误信息本身已经告诉你了啊, expire_at是字符串, php中字符串是没有format方法的(其实没有任何方法, 因为string在php中不是对象)

  • 首先 expired_at 在数据库中 需要为 timestamp 或者 datetime 类型

  • 其次, 在Model 中将 此字段加入 $dates

class Article extends Model {
    protected $dates = ['expired_at'];

}

然后就可以当Carbon调用了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏