Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 为什么不是';toJson()中是否包含我的访问器?_Laravel_Model_Laravel 4 - Fatal编程技术网

Laravel 为什么不是';toJson()中是否包含我的访问器?

Laravel 为什么不是';toJson()中是否包含我的访问器?,laravel,model,laravel-4,Laravel,Model,Laravel 4,我有一个模型合同,它有一个项目属性的访问器。该属性是一个“id”=>array的关联数组,但访问器将该数组转换为项目模型的集合: public function getProjectsAttribute($val) { $projects = array(); foreach($val as $projId => $projData) { $proj = new Project($this->roundingPrecision, $projD

我有一个模型
合同
,它有一个
项目
属性的访问器。该属性是一个“id”=>array的关联数组,但访问器将该数组转换为
项目
模型的集合:

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返回(例如在响应中),则
projects
节点为空。我已验证是否调用了访问器,但最终JSON不包含项目


因此,
Response::json($contract)
返回一个json对象,该对象包含
projects:{}
,但
Response::json($contract->projects)
正确返回项目。

发生这种情况可能是因为项目不是模型的属性,并且您没有将
'projects'
添加到模型的
$appends
属性中。(接近尾声)

更新:


发生此问题的原因是
attributesToArray
方法未处理
ArrayableInterface
的实例。此答案的注释中提供了方法覆盖,相关补丁已合并到laravel 4.1

否,此处不是这种情况
projects
是一个属性,它包含在Model的
attributesToArray
函数中,但是当契约数组被传递到
Response
中的
json
函数时,它与
Project
集合没有任何关系,所以我进一步查看,之所以会发生这种情况,是因为eloquent没有考虑属性是ArrayableInterface的实例。如果要从自定义基础模型扩展所有模型,只需尝试将此方法放在其中:(可能需要在文件顶部放置
use-illumb\Support\Contracts\ArrayableInterface;
)。我将在laravel/framework上做一次公关。这将使我走上正确的轨道。真正的问题是,经过变异的属性最终是一个
集合
。我需要以某种方式递归地调用每个级别的toArray on模型,你是对的……我需要
use
语句,它按预期工作。