Mik*_*der 7 php laravel eloquent laravel-5
我看了几个Laracast课程,现在我正在建立我的第一个Laravel项目.我有一些带有时间戳的Eloquent模型,用于created_at和updated_at.
为了显示正确的日期格式,Laravel有一个非常好的功能:访问器.但在每个Eloquent模型中,我现在有2个这样的函数:
public function getUpdatedAtAttribute($value) {
return Carbon::parse($value)->format('d-m-Y H:i:s');
}
public function getCreatedAtAttribute($value) {
return Carbon::parse($value)->format('d-m-Y H:i:s');
}
Run Code Online (Sandbox Code Playgroud)
这样日期将被强制显示为d-m-Y H:i:s
.唯一的问题是:我不想为我创建的每个模型执行此操作..
是否有一个默认的Laravel方式/约定我可以在全球范围内执行此操作,或者我应该制作某种类型MasterModel
并扩展它而不是Model
?
Kob*_*oby 10
我一直在寻找相同的,但遗憾的是无法想出一种创建全局访问器的方法.
dateFormat属性的"问题"是它是一个mutator,而不是一个访问器.扩展基类对于User模型和其他模型都不起作用,因为它扩展了Authenticatable,而不是直接扩展Model.
这就是我做的第二件好事 - 我创造了一个FormatsDates
特质.用你的方法:
trait FormatsDates
{
protected $newDateFormat = 'd-m-Y H:i:s';
public function getUpdatedAtAttribute($value) {
return Carbon::parse($value)->format($this->newDateFormat);
}
public function getCreatedAtAttribute($value) {
return Carbon::parse($value)->format($this->newDateFormat);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以在我想要的任何模型上使用这个特性.例如用户模型:
class User extends Authenticatable
{
use FormatsDates;
}
Run Code Online (Sandbox Code Playgroud)
也许有人觉得这很有用.
首先,您不需要提供访问者来更改日期格式.在模型中设置$ dateFormat变量就足够了,例如:
class User extends Model {
protected $dateFormat = 'U'; // this will give you a timestamp
}
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关可用格式的更多信息:http://php.net/manual/en/function.date.php
其次,如果您不想为所有模型设置$ dateFormat变量,请将其设置在那里并使所有模型扩展该类:
class BaseModel extends Illuminate\Database\Eloquent\Model {
protected $dateFormat = 'U';
}
class User extends BaseModel {
...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4133 次 |
最近记录: |