如何通过访问器添加额外的字段到最终的JSON ?



我需要添加一个空集合,它将始终是。我做了。

protected $appends = ['additional'];
public function getAdditionalAttribute()
{
return collect();
}

然后是附加的访问器,例如

public function getSomeAttributeAttribute()
{
//some code
return $something; //bool
}

然后在正确的地方,我称这个访问器为->append('some_attribute');但我需要结果在additional集合中。我试着这样做:

public function getSomeAttributeAttribute()
{
//some code
return $this->additional['some_attribute'] = $something; //bool
}

但它不起作用,结果与所有元素处于同一水平,而不是在集合additional内。我可以这样做:

public function getAdditionalAttribute()
{
return collect([
'some_attribute' => $this->some_attribute
]);
}

它可以工作,但是这个值将是恒定的,但是我只想在需要通过->append('some_attribute');时调用它但收藏要不断虽然空。或许还有另一种方法。我该怎么做呢?

也许您更容易覆盖序列化本身:

class YourModel extends Model
{
/**
* Convert the object into something JSON serializable.
*
* @return array
*/
#[ReturnTypeWillChange]
public function jsonSerialize()
{
return [
'additional' => [
'some_attribute' => $something
]
];
}
}

如果您需要集合,您可能希望使用自定义集合(php artisan make:collection \App\Collections\AdditionalCollection):

class YourModel extends Model
{
public function getAdditionalAttribute()
{
return new AppCollectionsAdditionalCollection($something);
}
}
class AdditionalCollection extends Collection
{
private $something;
public function __construct($something)
{
$this->something = $something;
parent::__construct([]);
}
public function __get(string $property)
{
if ($property === 'some_attribute') {
return $this->something;
}
}
}

最新更新