Laravel错误:调用字符串的成员函数format()


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

我使用的是Laravel 5.3

articles中有一个字段expired_at:

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

视图:

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

在字符串上调用成员函数format() (View: D:'wnmp'www'laravel-5-3-dev'resources'views' articles 'index.blade.php)

为什么?

在您的Article类中添加以下属性:

From Laravel 10.x

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */

protected $casts = [
    'expired_at' => 'datetime'
];

Laravel 10升级

在Laravel 10之前。X可以用

/**
 * The attributes that should be mutated to dates.
 *
 * @var array
 */
protected $dates = ['expired_at'];

文档

我觉得应该这样。它不会抛出错误

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

如果使用DB::检索复杂数据,则不能使用mutator。在这种情况下,我使用这个:

{{ date('m-Y', strtotime($hora->Fecha)) }}

{{ date('m-Y', strtotime($hora ?? ''->Fecha)) }}

其中"Fecha"为日期时间值

在User.php或你的模型中如何:

protected $casts = [
   'last_active_at' => 'datetime',
];

Laravel 10更新

$dates属性在Laravel 10中已被弃用并移除。相反,您应该使用$casts属性。例如:

protected $casts = [
  'expired_at' => 'datetime',
];

With,在模型的$dates上声明的字段。

试试这个:<>之前可选(文章-> expired_at)——>格式(Y-m-d)

您需要将expired_at转换为Eloquent Model中的datetime。您得到这个错误,因为您正在调用format函数的字符串,而不是DateTime实例。