我需要添加一个空集合,它将始终是。我做了。
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;
}
}
}