我有一个模型Review
,它的unix时间戳是其属性中的一个(表格列)。
我在这个模型中使用2 accessors:
public function getReviewDateAttribute($value)
{
return strftime('%A %e %B %Y', $value);
}
public function getReviewDateIsoAttribute()
{
return Carbon::createFromTimestamp($this->review_date)->toDateTimeString();
}
getReviewDateAttribute
按预期工作,并在我编写查询时显示在模型集合中。
但是getReviewDateIsoAttribute
没有。这可能是什么原因?
一个子问题:如果我在两个函数中使用相同的属性,我如何使用原始格式作为输入值?
答案 0 :(得分:8)
您应该将其添加到$appends
数组中。它并没有在寻找getXXXXXAttribute
的所有可用方法中徘徊。使用另一个是因为它是实际属性的访问者,这个属性不是实际属性。
class YourModel ....
{
protected $appends = ['review_date_iso'];
...
}
Laravel 5.5 Docs - Eloquent - Serialization - Appending Values to JSON
答案 1 :(得分:1)
这可能是因为ReviewDateIso
不是实际列,因此不会显示在模型集合中...您可以通过直接调用方法直接访问它
$model->getReviewDateIsoAttribute()
根据docs访问器的一种方法,在将列返回到查询它的方法之前更改列的值。
如果您希望在调用集合时显示它,Json会将其附加到输出
protected $appends = ['name_of_attribute'];
答案 2 :(得分:0)
实际上,这取决于你想要实现的目标。例如,如果您要在Blade中显示任何内容,则只要您希望$object->review_date_iso
获取此属性值,就可以使用。
但是,如果要返回Json响应(例如API),则需要告诉Eloquent模型在转换为JSON格式时将额外字段附加到模型中。
您的模型中可能有review_date
属性(这是我想的数据库中的列)但您在数据库中的表中没有review_date_iso
,因此在您的模型中需要使用:
protected $appends = ['review_date_iso'];
但您不必在此处review_date
,因为它已经在您的数据库表中,您的访问者将被自动解雇。
答案 3 :(得分:0)