这个问题是由以下事实引起的:'s 方法忽略了任何与基础表中的列没有直接关系的访问器。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);
}
}