我有我的VitalSignSet模型:
class VitalSignSet extends Model
{
protected $dates = [
'datetimetaken',
];
. . .
}
现在在我的函数中我有这个函数,它返回json编码的遇到最新的生命体征集。 (Encounter与VitalSignSet有一个hasMany关系)在返回之前,我希望datetimetaken
字段的格式是为了人类的可读性,但仅适用于这种特殊的方法。 (这就是我没有使用访问者的原因)
public function get(Request $request, Encounter $encounter) {
// Setting the latest vital sign set
$encounter->latest_vitals = $encounter->VitalSignSets()
->orderBy('datetimetaken','desc')->get()->first();
// Formatting the date :
// Works when just returning the date.
// Does not return in this format when returning the model with the date.
$encounter->lastest_vitals->datetimetaken->format('M j, Y');
return $encounter->toJson();
}
从js ajax请求访问上述方法。当我解析并记录响应时,datetimetaken格式没有改变。 (仍然是YYYY-mm-dd H:i:s
格式)但是当我在格式化后返回$encounter->latest_vitals->datetimetaken;
时,将返回一个字符串,格式为I set。但是当我返回包含VitalSignSet模型$encounter->latest_vitals;
(json响应)时,格式在YYYY-mm-dd
中。那是为什么?
答案 0 :(得分:1)
这是因为您只是访问数据对象,而您实际上并未对其进行更改。
不幸的是,我无法(我能够找到)编辑模型中Carbon
实例的格式。这是因为Laravel使用相同的格式来解析数据库中的日期时间,就像将其格式化为字符串一样。
此外,您无法将格式化的字符串分配给原始字符串,因为Eloquent将尝试解析该字符串(并失败)。
一种方法(如果你想/需要保持密钥为datetime
)将输出转换为数组,编辑值,然后返回:
$latestVitals = $encounter->VitalSignSets()
->orderBy('datetimetaken', 'desc')->first();
$encounter->latest_vitals = collect($latestVitals->toArray())
->pipe(function ($item) use ($latestVitals) {
$item['datetimetaken'] = $latestVitals->datetimetaken->format('M j, Y');
return $item;
});
return $encounter;
如果您不介意将密钥更改为其他内容(例如formatted_datetimetaken),您可以为VitalSignSet添加任何模型的访问器:
public function getFormattedDatetimetakenAttribute()
{
return $this->datetimetaken->format('M j, Y');
}
然后只使用append()
即
$encounter->latest_vitals = $encounter->VitalSignSets()
->orderBy('datetimetaken','desc')
->first()->append('formatted_datetimetaken');
最后,您可以使用http://momentjs.com/docs之类的内容编辑js中的日期时间。假设您的响应已分配给变量response
:
response.latest_vitals.datetimetaken = moment(response.latest_vitals.datetimetaken, "YYYY-MM-DD HH:mm:ss")
.format("MMM D, YYYY")
希望这有帮助!