【问题标题】:Redundant ModelName in CakePHP find ResultsCakePHP 中的冗余 ModelName 查找结果
【发布时间】:2012-08-06 06:50:07
【问题描述】:

我正在尝试删除 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"}]

有什么想法吗?

【问题讨论】:

    标签: arrays json cakephp


    【解决方案1】:

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

    假设 CakePHP 2:

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

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

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

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

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

    【讨论】:

    • 谢谢!是的,我知道我可以使用 foreach 循环,但我正在寻找更优雅的东西。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多