Php 拉威尔5.5:对于所有有说服力的模型,是否有一种类似于全球变异的东西?
我的所有型号都扩展了Php 拉威尔5.5:对于所有有说服力的模型,是否有一种类似于全球变异的东西?,php,laravel,Php,Laravel,我的所有型号都扩展了illumb\Database\elount\Model。我想要实现的是,每个模型以特定的日期格式显示在创建的、在更新的和在删除的,或者如果从数据库检索/获取数据时未设置日期,则保留为 我可以使用mutator并定义公共函数setCreateDataAttribute(),检查值是否为碳日期,然后调用所需的->format(),但我必须对每个模型的每个日期列执行此操作(定义此方法) 另一方面,父级模型位于供应商中,因此我无法修改它。有没有一种方法可以在我的所有模型中全局定义和
illumb\Database\elount\Model
。我想要实现的是,每个模型以特定的日期格式显示在创建的、在更新的和在删除的,或者如果从数据库检索/获取数据时未设置日期,则保留为
我可以使用mutator并定义公共函数setCreateDataAttribute()
,检查值是否为碳日期,然后调用所需的->format()
,但我必须对每个模型的每个日期列执行此操作(定义此方法)
另一方面,父级模型
位于供应商
中,因此我无法修改它。有没有一种方法可以在我的所有模型中全局定义和应用它
PS。我的问题不是修改:
/**
* The storage format of the model's date columns.
*
* @var string
*/
protected $dateFormat;
因为(如果我理解正确的话)它负责在数据库中存储数据时设置日期格式。我想让它保持原样因此db级别没有变化。我想在动态检索时设置新的日期格式。您可以创建一个
特征
,并在您的模型中使用它:
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;
}
您可以始终使用继承并创建自己的
Model
子类来扩展雄辩的模型。是的,但是对于我的所有模型,我必须将extends Model
替换为extends MyModel
,这也会增加一些工作(无论多么可行)。我认为拉雷维尔可以在本地提供更快的解决方案。谢谢你的评论。这听起来像是一个标准的继承问题。您正在将公共功能整合到父类中。您可以使用find/replace在所有类中快速进行此更改。