为什么我的Laravel雄辩的访问者没有出现在回复中?

为什么我的Laravel雄辩的访问者没有出现在回复中?,laravel,laravel-5,eloquent,laravel-5.5,accessor,Laravel,Laravel 5,Eloquent,Laravel 5.5,Accessor,我有一个模型Review,它的一个属性(表列)是unix时间戳 我在这个模型中使用了2: 公共函数getReviewDateAttribute($value) { 返回strftime('%A%e%B%Y',$value); } 公共函数getReviewDateIsoAttribute() { 返回Carbon::createFromTimestamp($this->review_date)->toDateTimeString(); } getReviewDateAttribute按预期工作

我有一个模型
Review
,它的一个属性(表列)是unix时间戳

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

公共函数getReviewDateAttribute($value)
{
返回strftime('%A%e%B%Y',$value);
}
公共函数getReviewDateIsoAttribute()
{
返回Carbon::createFromTimestamp($this->review_date)->toDateTimeString();
}
getReviewDateAttribute
按预期工作,并在我编写查询时显示在模型集合中

但是,
getReviewDateIsoAttribute
没有。这可能是什么原因

子问题:如果在两个函数中使用相同的属性,如何使用原始格式作为输入值


您应该将其添加到
$appends
数组中。它没有遍历所有可用的方法来查找
getXXXXXAttribute
。使用另一个是因为它是实际属性的访问器,而这个不是实际属性

class YourModel ....
{
     protected $appends = ['review_date_iso'];
     ...
}

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

$model->getReviewDateIsoAttribute()
根据docs访问器,在将列返回到查询该列的方法之前,有一种更改列值的方法

如果希望在调用集合时显示为Json,请使用

protected $appends = ['name_of_attribute'];

事实上,这取决于你想要实现什么。例如,如果要在Blade中显示任何内容,则可以随时使用
$object->review\u date\u iso
获取此属性值

但是,如果您返回Json响应(例如API),则需要告诉Eloquent模型在转换为Json格式时向您的模型附加额外的字段

模型中可能有
review\u date
属性(我想这是数据库中的列),但数据库中的表中没有
review\u date\u iso
,因此在模型中需要使用:

protected $appends = ['review_date_iso'];

但您不必在此处包含查看日期,因为它已经在数据库中的表中,您的访问器将自动启动。

我使用tinker和dd方法尝试了查询。因此,我感到困惑,因为我无法在属性列表中查看我的新访问器

我想我错过了什么。后来我注意到,当我们添加查询结果时,附加的属性会单独显示,而不是通常的属性JSON

我浪费时间认为我的存取器不工作。只是我没有以正确的方式或正确的地点进行检查。因此,我附上下面的图片,如果有人像我一样被访问者卡住,这可能会帮助他们


我理解你的意思,但是Laravel
访问器是“神奇”的函数,可以动态创建属性,因此这仍然应该有效。请看一下文档中的
getFullNameAttribute
示例。它也可能与查询的结构方式有关,这里有一个链接指向这样一个问题,可以自动将访问器附加到响应中,非常感谢!我花了很多时间在vue组件中使用访问器!这是否适用于来自traits的方法?因为我把isAdmin()移到了一个trait