首先,我想说我知道如何为我的问题创建丑陋的解决方案。我正在寻找好的解决方案和最佳实践:)
如何从 Kohana 3 ORM 对象(包括关系类型为一对多的相关对象)创建深层层次数组(稍后为 json_encode)?
问题是 ORM->as_array() 方法确实对“有一个”和“属于”关系递归地工作,但是当你遇到一个“有很多”关系时会停止并强制你手动使用 ->find_all() .
假设我正在使用 Kohana 3 和内置 ORM 创建一个 JSON API REST 服务器。当有人查看此 URL 时:www.example.com/api/user?id=5 他们将为 id=5 的用户提供 JSON 对象。
这些是 orm 模型和关系:
- 用户 属于一个国家
- 用户 有很多 消息。
- 消息 属于一个类别
我希望这个工作:
echo json_encode(
ORM::factory('user', 5)
->with('country')
->with('messages')
->with('messages:category')
->find()
->as_array()
);
并给我这样的输出:
{
name: "John"
age: 54,
country_id: 5,
country: {
name: 'Sweden',
code: 'SE'
},
messages: {
{
content: 'Lorem ipsum dolor...',
category_id: 1,
category: {...}
},
{
content: 'Sit amet elit...',
category_id: 2,
category: {...}
},
{
content: 'Consectetur ipsum dolor...',
category_id: 3,
category: {...}
}
}
}
但这行不通。这就是你会得到的一切:
{
name: "John"
age: 54,
country_id: 5,
country: {
name: 'Sweden',
code: 'SE'
}
}
有人分叉或扩展了 Kohana 3 ORM 以支持这种功能吗?
有人知道以某种方式为您解决这个问题的任何好的 Kohana 3 api 模块吗?