栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在加载时向Laravel / Eloquent模型添加自定义属性?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在加载时向Laravel / Eloquent模型添加自定义属性?

问题是由

Model
toArray()
方法忽略所有与基础表中的列不直接相关的访问器而导致的。

正如泰勒·奥特威尔(Taylor
Otwell)在这里提到的:“这是故意的,并且出于性能考虑。”
但是,有一种简单的方法可以实现此目的:

class EventSession extends Eloquent {    protected $table = 'sessions';    protected $appends = array('availability');    public function getAvailabilityAttribute()    {        return $this->calculateAvailability();      }}

只要您添加了适当的访问器,$ appends属性中列出的所有属性都将自动包含在模型的数组或JSON形式中。

旧答案(适用于 <4.08的Laravel版本):

我发现的最佳解决方案是重写

toArray()
方法并显式设置属性:

class Book extends Eloquent {    protected $table = 'books';    public function toArray()    {        $array = parent::toArray();        $array['upper'] = $this->upper;        return $array;    }    public function getUpperAttribute()    {        return strtoupper($this->title);        }}

或者,如果您有很多自定义访问器,请遍历所有访问器并应用它们:

class Book extends Eloquent {    protected $table = 'books';    public function toArray()    {        $array = parent::toArray();        foreach ($this->getMutatedAttributes() as $key)        { if ( ! array_key_exists($key, $array)) {     $array[$key] = $this->{$key};    }        }        return $array;    }    public function getUpperAttribute()    {        return strtoupper($this->title);        }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443007.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号