CakePHP中的冗余ModelName查找结果

时间:2012-08-09 04:17:49

标签: arrays json cakephp

我试图摆脱CakePHP中find方法返回的结果数组中的冗余模型名称。就像现在一样,如果我要执行类似$ results = $ this-> Model-> find('all')的操作,我必须通过$ results [Model] [fieldName]而不是$ $结果[fieldName的]。

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

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

我想要更优雅的东西:

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

有什么想法吗?

2 个答案:

答案 0 :(得分:20)

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

假设CakePHP 2:

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

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

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

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

之后,你的$物品将删除额外的钥匙。

答案 1 :(得分:2)

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