我有一个模型Contract
,它具有projects
属性的访问权限。该属性是“id”=>的关联数组。数组,但访问者将数组转换为Project
模型的集合:
public function getProjectsAttribute($val)
{
$projects = array();
foreach($val as $projId => $projData)
{
$proj = new Project($this->roundingPrecision, $projData);
$proj->_id = $projId;
$projects[] = $proj;
}
return Collection::make($projects);
}
如果我得到一个Contract
对象,我可以调用$contract->projects
并按预期工作,但是,如果我将$ contract作为JSON返回(例如在响应中),{{1} } node为空。我已经验证了调用访问器,但结束JSON不包含项目。
因此,projects
返回包含Response::json($contract)
的JSON对象,但projects : {}
正确返回项目。
答案 0 :(得分:1)
这可能是因为项目不是模型的属性,并且您没有将'projects'
添加到模型的$appends
属性中。 http://laravel.com/docs/eloquent#converting-to-arrays-or-json(接近结尾)
更新:
问题出现了,因为方法attributesToArray
没有处理ArrayableInterface
的实例。本答案的评论中提供了方法覆盖,相关补丁已合并到laravel 4.1