为什么我的访问者不包含在toJson()中?

时间:2014-05-01 19:18:02

标签: laravel model laravel-4

我有一个模型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 : {}正确返回项目。

1 个答案:

答案 0 :(得分:1)

这可能是因为项目不是模型的属性,并且您没有将'projects'添加到模型的$appends属性中。 http://laravel.com/docs/eloquent#converting-to-arrays-or-json(接近结尾)

更新:

问题出现了,因为方法attributesToArray没有处理ArrayableInterface的实例。本答案的评论中提供了方法覆盖,相关补丁已合并到laravel 4.1