碳日期在数据库中保存为字符串
Carbon Date Being Saved as String in Database
我正在尝试使用工厂来播种一些数据。我试图播种的字段之一是日期字段——我在我的工厂中使用以下代码这样做:
return [
...
'date' => Carbon::now()->subDays(rand(1, 365))->startOfDay()
];
问题是,这是作为字符串保存在数据库中的 -- 这意味着我不能在我的 blade 模板中执行以下操作:{{ $transaction->date->format('M, d Y') }}
、
当我尝试这样做时,我收到以下错误消息:Call to a member function format() on string
。
作为测试,我在我的 blade 模板中尝试了完全相同的代码,只是将 created_at
切换为 date
- 它按我想要的方式工作。即,这有效:{{ $transaction->created_at->format('M, d Y') }}
.
万一重要,created_at
字段是在我的迁移文件中使用 $table->timestamps()
创建的,而 date
字段是按如下方式创建的:$table->date('date');
.
知道我需要做什么才能让它工作吗?
谢谢。
Laravel 提供了一种将某些模型属性“转换”为特定数据类型的方法,包括字符串、整数、日期等。由于 Carbon 内置于 Laravel,指定 date
type auto-converts Carbon 实例的模型属性。您需要做的就是为您的模型提供该逻辑:
class Transaction extends Model {
protected $casts = [
'date' => 'date'
];
...
}
现在,当您检索 Transaction
模型记录时,date
属性将自动成为 Carbon
实例:
$transaction = Transaction::first();
dd($transaction->date, get_class($transaction->date));
// ^ Carbon\Carbon @1646769789^ {#4514 ... }, `Carbon\Carbon`
现在,您可以简单地通过链接来执行 Carbon 逻辑:
{{ $transaction->date->format('Y-m-d') }}
// `2022-03-08`
有更多的转换类型可用,您只需将它们作为 key/value 对添加到 $casts
数组即可指定多个属性转换。完整文档在这里:
https://laravel.com/docs/9.x/eloquent-mutators#attribute-casting
我正在尝试使用工厂来播种一些数据。我试图播种的字段之一是日期字段——我在我的工厂中使用以下代码这样做:
return [
...
'date' => Carbon::now()->subDays(rand(1, 365))->startOfDay()
];
问题是,这是作为字符串保存在数据库中的 -- 这意味着我不能在我的 blade 模板中执行以下操作:{{ $transaction->date->format('M, d Y') }}
、
当我尝试这样做时,我收到以下错误消息:Call to a member function format() on string
。
作为测试,我在我的 blade 模板中尝试了完全相同的代码,只是将 created_at
切换为 date
- 它按我想要的方式工作。即,这有效:{{ $transaction->created_at->format('M, d Y') }}
.
万一重要,created_at
字段是在我的迁移文件中使用 $table->timestamps()
创建的,而 date
字段是按如下方式创建的:$table->date('date');
.
知道我需要做什么才能让它工作吗?
谢谢。
Laravel 提供了一种将某些模型属性“转换”为特定数据类型的方法,包括字符串、整数、日期等。由于 Carbon 内置于 Laravel,指定 date
type auto-converts Carbon 实例的模型属性。您需要做的就是为您的模型提供该逻辑:
class Transaction extends Model {
protected $casts = [
'date' => 'date'
];
...
}
现在,当您检索 Transaction
模型记录时,date
属性将自动成为 Carbon
实例:
$transaction = Transaction::first();
dd($transaction->date, get_class($transaction->date));
// ^ Carbon\Carbon @1646769789^ {#4514 ... }, `Carbon\Carbon`
现在,您可以简单地通过链接来执行 Carbon 逻辑:
{{ $transaction->date->format('Y-m-d') }}
// `2022-03-08`
有更多的转换类型可用,您只需将它们作为 key/value 对添加到 $casts
数组即可指定多个属性转换。完整文档在这里:
https://laravel.com/docs/9.x/eloquent-mutators#attribute-casting