CakePHP 3.0 - 如何以正确的格式从更深的包含中返回数据?

时间:2015-03-09 18:27:25

标签: query-builder cakephp-3.0 contain

我正在使用其中包含州ID的用户个人资料,因此我有这样的疑问:

    $user = $this->Users->find()
        ->where(['Users.id' => $this->Auth->user('id')])
        ->contain(['UserProfiles' => function ($q) {
            return $q
                ->select(['city', 'address_one', 'address_two', 'zip'])
                ->contain(['States' => function ($q) {
                return $q
                    ->select(['id']);
            }]);
        }])
        ->select('first_name', 'last_name')
        ->first();

这会正确地返回我的所有数据,除了状态 - 相反,我得到了回复:

state {"id":6}

这有点奇怪,所以在前端我试过了:

echo $user->user_profile->state; // yields the string {"id": 6}
echo $user->user_profile->state->id; // error: trying to access property of non-object
echo $user->user_profile->state['id']; // index error, doesn't exist

那么这笔交易是什么?为什么以这种方式返回?我在列上没有任何内容,将其指定为json或任何奇怪的内容;只是普通的蛋糕烘焙物。我该如何吐出身份?

1 个答案:

答案 0 :(得分:0)

感谢评论,我发现了这个问题。虽然我在state_id中保存id并且基于该列包含,但是尚未删除的旧列(状态)是一个文本字段并且搞乱了状态包含的返回值,因为包含的名称也被命名'状态'

我进入了数据库,重新命名为“状态”'到' old_state',再次以标准格式返回。