laravel 如何呈现模型数据

Posted

技术标签:

【中文标题】laravel 如何呈现模型数据【英文标题】:how model data is presented laravel 【发布时间】:2013-10-09 20:51:08 【问题描述】:

我有一个想要以 json 格式返回的模型。我也想返回时间戳。问题是时间戳以以下格式保存 2013-10-02 09:45:22 但我希望它采用不同的格式。我仍然想要数据库中的原始格式,但是当它作为 JSON 输出时,我想要 2013.10.02。我发现您可以覆盖 getDateFormat() 但它似乎确实将数据库中使用的格式更改为。

我总是可以在数据返回之前循环遍历数据,但这种代码似乎属于模型。

已更新答案:

Add a custom attribute to a Laravel / Eloquent model on load? 解释了这是如何工作的。

class User extends Eloquent 

    protected $appends = array('my_date');    

    public function getMyDateAttribute()
    
        return date('Y.m.d',strtotime($this->attributes['created_at']));
    


关键部分是受保护的变量 $appends,它确保在使用 toArray 或 Json 转换对象时包含访问器。

【问题讨论】:

【参考方案1】:

您可以创建一个额外的访问器,例如:

class User extends Eloquent 

    protected $appends = array('my_date');

    public function setMyDateAttribute($value)
    
         return $this->attributes['my_date'] = $value;
    

    public function getMyDateAttribute($value)
    
        return date('Y-m-d', strtotime($this->attributes['created_at']) );
    


然后像User->my_date;一样使用它

【讨论】:

但是当这样做return User::all()时会返回格式化的日期吗? 查看我修改后的答案。我用实际的代码试过了,它可以工作。请注意,您必须将该列添加到 $appends 属性。请参阅底部的文档:laravel.com/docs/eloquent#converting-to-arrays-or-json 同时我用同样的发现更新了我的问题。

以上是关于laravel 如何呈现模型数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中使非数据库模型具有两个属性

Laravel 雄辩模型如何从关系表中获取数据

带数据表的Laravel:搜索加密数据

如何从 Laravel 中的现有数据库创建迁移和模型

如何使用Laravel Blade模板呈现以下类型的表?

laravel如何查特定中间表数据的关联数据