11

我试图摆脱 CakePHP 中 find 方法返回的结果数组中的冗余模型名称。现在,如果我要执行 $results = $this->Model->find('all') 之类的操作,我将不得不通过 $results[Model][fieldName] 而不是 $results 访问结果字段[字段名称]。

我知道在数组中有模型名称有好处,但我正在尝试构建一个 api,所以我需要对数组进行 json 编码。包含模型名称后,我得到了一些可怕的东西,例如:

[{"Model":{"field":"blah","field":"blah"}},{"Model":{"field":"blah","field":"blah"}}]

我想要更优雅的东西,比如:

[{"field":"blah","field":"blah"},{"field":"blah","field":"blah"}]

有任何想法吗?

4

2 回答 2

20

在您的控制器中,不是序列化查找的结果,而是更深层次地序列化。

假设 CakePHP 2:

$things = $this->Thing->find('all');
$things = Set::extract('/Thing/.', $things);

现在您的结果应该没有 JSON 中的额外级别。

另一种冗长的方法是for loop超过结果:

foreach ($things as $k => &$v) {
    $v = $v['Thing']
}

之后,您的 $things 将删除额外级别的键。

于 2012-08-09T04:26:29.697 回答
2

对于更高版本的 Cake,使用 $things = Set::extract($things, '{n}.Thing');

于 2013-08-07T14:50:38.783 回答