问题是由
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); }}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)