CakePHP 3.0 - 我如何 return 来自更深层次的数据以正确的格式包含?

CakePHP 3.0 - How do I return data from a deeper contain in the correct format?

我正在处理其中包含状态 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();

我的 returns 所有数据都正确,但州除外 - 相反,我得到了这个:

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 或任何奇怪的内容;只是普通的蛋糕烘焙对象。怎么吐出id?

感谢评论,我发现了问题。尽管我将 id 保存在 state_id 中并基于该列进行包含,但尚未删除的旧列(状态)是一个文本字段并弄乱了状态包含的 return 值,因为包含也被命名为 'state.'

我进入数据库,将 'state' 重命名为 'old_state',id 再次 return 为标准格式。