我所有的模型都扩展了Illuminate\Database\Eloquent\Model
。我想要实现的是每个模型都以特定的日期格式显示created_at
,updated_at
和deleted_at
,或者在我检索/获取时未设置日期的情况下保留为null
来自DB的数据(即时)。
我可以使用mutator并定义public function setCreatedAtAttribute()
,检查value是否为Carbon日期,然后调用所需的->format()
,但是我必须在每个日期列的每个模型上执行此操作(定义此方法)
另一方面,父母Model
生活在vendor
之内,因此我无法对其进行修改。有没有一种方法可以全局定义它并将其应用于我的所有模型?
PS。我的问题不是关于修改:
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat;
作为(如果我理解正确),这负责在数据库中存储数据时设置日期格式。我想保持原样。 因此在数据库级别上没有任何更改。我想即时获取新的日期格式。
答案 0 :(得分:1)
您可以创建一个trait
并在模型中使用它:
trait DatesTrait
{
/**
* Mutator for created_at
*/
public function getCreatedAtAttribute($value)
{
return $this->formatDatetime($value);
}
/**
* Mutator for updated_at
*/
public function getUpdatedAtAttribute($value)
{
return $this->formatDatetime($value);
}
/**
* Replace this with any formatting logic that suits your needs
*/
protected function formatDatetime($value)
{
if (is_null($value)) {
return $value;
}
if (is_string($value)) {
$value = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', $value);
}
return $value->format('Y-m-d H:i:s');
}
}
然后在每个模型中
class ModelX
{
use DatesTrait;
}