为什么我的 Laravel Eloquent 访问器没有出现在响应中?
Why is my Laravel Eloquent accessor not showing up in the response?
我有一个模型 Review
,它有一个 unix 时间戳作为它的属性之一(table 列)。
我在这个模型中使用了 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
没有。这可能是什么原因?
子问题:如果我在两个函数中使用相同的属性,如何使用原始格式作为输入值?
您应该将其添加到 $appends
数组中。它并没有遍历所有可用的方法来寻找 getXXXXXAttribute
。使用另一个是因为它是实际属性的访问器,这个不是实际属性。
class YourModel ....
{
protected $appends = ['review_date_iso'];
...
}
Laravel 5.5 Docs - Eloquent - Serialization - Appending Values to JSON
这可能是因为 ReviewDateIso
不是实际的列,因此不会出现在模型集合中...您可以通过直接调用方法直接访问它
$model->getReviewDateIsoAttribute()
根据文档访问器,一种在将列返回给查询它的方法之前更改列值的方法。
如果您希望它在调用集合时显示 Json 将其附加到输出
protected $appends = ['name_of_attribute'];
事实上,这取决于您要实现的目标。例如,如果您要在 Blade 中显示任何内容,您可以随时使用 $object->review_date_iso
来获取此属性值。
但是,如果您要返回 Json 响应(例如 API),您需要告诉 Eloquent 模型在转换为 [=26= 时向模型附加额外的字段]格式。
您的模型中可能有 review_date
属性(我想这是数据库中的列)但是您在数据库中的 table 中没有 review_date_iso
,所以在您需要使用的模型:
protected $appends = ['review_date_iso'];
但您不必在此处包含 review_date
,因为它已经在您的 table 数据库中,并且您的访问器将被自动触发。
我尝试在 tinker 中使用 dd 方法进行查询。所以我很困惑,因为我无法在属性列表中查看我的新访问器。
我以为我错过了什么。然后后来我注意到当我们 dd 查询结果时附加的属性与通常的属性 JSON.
分开显示
我以为我的访问器不工作而浪费了时间。只是我没有在正确的方式或正确的地方检查。所以我附上下面的图片,如果有人像我一样卡在访问器上,这可能会对他们有所帮助。
我有一个模型 Review
,它有一个 unix 时间戳作为它的属性之一(table 列)。
我在这个模型中使用了 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
没有。这可能是什么原因?
子问题:如果我在两个函数中使用相同的属性,如何使用原始格式作为输入值?
您应该将其添加到 $appends
数组中。它并没有遍历所有可用的方法来寻找 getXXXXXAttribute
。使用另一个是因为它是实际属性的访问器,这个不是实际属性。
class YourModel ....
{
protected $appends = ['review_date_iso'];
...
}
Laravel 5.5 Docs - Eloquent - Serialization - Appending Values to JSON
这可能是因为 ReviewDateIso
不是实际的列,因此不会出现在模型集合中...您可以通过直接调用方法直接访问它
$model->getReviewDateIsoAttribute()
根据文档访问器,一种在将列返回给查询它的方法之前更改列值的方法。
如果您希望它在调用集合时显示 Json 将其附加到输出
protected $appends = ['name_of_attribute'];
事实上,这取决于您要实现的目标。例如,如果您要在 Blade 中显示任何内容,您可以随时使用 $object->review_date_iso
来获取此属性值。
但是,如果您要返回 Json 响应(例如 API),您需要告诉 Eloquent 模型在转换为 [=26= 时向模型附加额外的字段]格式。
您的模型中可能有 review_date
属性(我想这是数据库中的列)但是您在数据库中的 table 中没有 review_date_iso
,所以在您需要使用的模型:
protected $appends = ['review_date_iso'];
但您不必在此处包含 review_date
,因为它已经在您的 table 数据库中,并且您的访问器将被自动触发。
我尝试在 tinker 中使用 dd 方法进行查询。所以我很困惑,因为我无法在属性列表中查看我的新访问器。
我以为我错过了什么。然后后来我注意到当我们 dd 查询结果时附加的属性与通常的属性 JSON.
分开显示我以为我的访问器不工作而浪费了时间。只是我没有在正确的方式或正确的地方检查。所以我附上下面的图片,如果有人像我一样卡在访问器上,这可能会对他们有所帮助。