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在所有类中快速进行此更改。