在我的控制器中我有:
$Locations = Locations::where(something);
$Locations->get()->toArray(true);
在模型中:
function toArray($include_all = false) {
var_dump($include_all);
}
include all变量为false,但函数被调用。 这有什么原因吗?
我想调用自定义toArray,因为我有更多oneToMany关系,我想要更改不同的结构(例如,其中一些是序列化的)
谢谢
答案 0 :(得分:1)
您可以使用Illuminate\Support\Collection
方法(例如map()
和filter()
)来修改集合以及该调用toArray()
方法的结尾。
答案 1 :(得分:0)
覆盖相当容易,但我认为应该首先清除一些混乱。
首先,在这种情况下,您调用的toArray()
方法位于Collection
上,这是您在模型上使用get()
时返回的对象。
话虽如此,您可以将以下内容添加到Location
模型中以返回自定义集合...
public function newCollection(array $models = [])
{
return new CustomCollection($models);
}
然后,您使用适当的命名空间编写新的CustomCollection
类,以确保它自动加载,延长\Illuminate\Database\Eloquent\Collection
,然后您可以继续覆盖toArray
方法。
然而,您感觉就像是因为您已经在使用它而随机选择此toArray()
作为执行逻辑的合适人选。您应该考虑创建一个新函数,该函数调用$this->toArray()
来获取结果并根据需要修改它们并返回它。
如果您在其他型号上需要相同的功能,请继续在需要时添加newCollection
方法。
这也是在文档中,可能值得一试......
https://laravel.com/docs/5.2/eloquent-collections#custom-collections