为什么我的Laravel Eloquent访问器没有出现在响应中?

onl*_*mas 1 accessor laravel eloquent laravel-5 laravel-5.5

我有一个模型Review,它具有unix时间戳作为其属性的1个(表格列).

我在这个模型中使用了2个访问器:

public function getReviewDateAttribute($value)
{
    return strftime('%A %e %B %Y', $value);
}

public function getReviewDateIsoAttribute()
{
    return Carbon::createFromTimestamp($this->review_date)->toDateTimeString();
}
Run Code Online (Sandbox Code Playgroud)

getReviewDateAttribute 按预期工作,并在我编写查询时显示在模型集合中.

getReviewDateIsoAttribute不是.这可能是什么原因?一个子问题:如果我在两个函数中使用相同的属性,我如何使用原始格式作为输入值?

在此输入图像描述

lag*_*box 9

您应该将它添加到$appends数组中.它不是在寻找所有可用的方法getXXXXXAttribute.使用另一个是因为它是实际属性的访问者,这个属性不是实际属性.

class YourModel ....
{
     protected $appends = ['review_date_iso'];
     ...
}
Run Code Online (Sandbox Code Playgroud)

Laravel 5.5 Docs - Eloquent - 序列化 - 将值附加到JSON


kof*_*ola 5

这可能是因为ReviewDateIso不是实际的列,因此不会显示在模型集合中...您可以通过直接调用方法直接访问它

$model->getReviewDateIsoAttribute()
Run Code Online (Sandbox Code Playgroud)

根据文档,访问器是一种在将列返回到查询它的方法之前更改列值的方法。

如果您希望它在您以 Json 形式调用集合时显示,请将其附加到输出中

protected $appends = ['name_of_attribute'];
Run Code Online (Sandbox Code Playgroud)