首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CakePHP模型查询返回数据格式

CakePHP模型查询返回数据格式
EN

Stack Overflow用户
提问于 2012-04-15 12:21:02
回答 3查看 1K关注 0票数 0

我正在寻找一种方法,使它的蛋糕以相同的格式/结构返回所有数据库数据……目前,它根据关系返回两种不同类型的格式。

如果一个模型'B‘与当前被查询的模型'A’相关联,那么它将把'B‘的模型关联放在它下面,正如你在下面的User中看到的那样。我想要它,以便所有查询都使用该结构。

示例:$this->find('all',....返回:

代码语言:javascript
运行
复制
Array
(
    [0] => Array
        (
            [UserGroup] => Array
                (
                    [id] => 53
                    [user_id] => 100003332014851
                    [media_id] => 
                    [name] => john
                    [description] => qwasdfad
                )


            [User] => Array
                (
                    [id] => 100003332014851
                    [session_id] => ssm2qbrotmm13ho1ipm8ii2492
                    [username] => 
                    [password] => -1
                    [Planner] => Array
                         (
                         )

                     [Purchase] => Array
                         (
                         )

                     [Listing] => Array
                         (
                         )
               )
       )

我想让它看起来像这样:

代码语言:javascript
运行
复制
Array
(
    [0] => Array
        (
            [UserGroup] => Array
                (
                    [id] => 53
                    [user_id] => 100003332014851
                    [media_id] => 
                    [name] => john
                    [description] => qwasdfad
                    [User] => Array
                         (
                              [id] => 100003332014851
                              [session_id] => ssm2qbrotmm13ho1ipm8ii2492
                              [username] => 
                              [password] => -1
                              [Planner] => Array
                                   (
                                   )

                               [Purchase] => Array
                                   (
                                   )

                               [Listing] => Array
                                   (
                                   )
                            )
                     )
               )
       )
EN

回答 3

Stack Overflow用户

发布于 2012-04-16 00:25:02

在CakePHP中,find()方法返回的数据与第一种格式类似。但是如果你想像第二个一样格式化,那么你必须手动处理它(如果可能的话,尽量避免这种情况)

代码语言:javascript
运行
复制
$data = $this->find('all');
$assocs = Set::extract('/User', $data); // extracting all `User` array

foreach($assocs as $key => $assoc) {
    unset($data[$key]['User']); // removing the associate `User` from `$data`
    $data[$key]['UserGroup']['User'] = $assoc['User']; // adding associate under `UserGroup`
}
票数 0
EN

Stack Overflow用户

发布于 2012-04-16 14:43:28

最后做了这个..。它会将输出更改为我们需要的内容。顶层的项目没有标题,这是很好的,我只是调整了我们的脚本为它…如果其他人需要一个自定义的想法,也许这会对他们有所帮助

也不能保证这涵盖了所有可能的结果,但到目前为止,它适用于我们拥有的所有查询。

代码语言:javascript
运行
复制
class AppModel extends Model {
    function afterFind($results, $primary) {
        //if this is a primary, structure like a secondary so entire site is same format
        if ($primary) {
            $class = get_class($this);

            //simple fix for primary
            foreach ($results as $key => $result) {
                $result = $this->formatData($result, $class);
                $results[$key] = $result;
            }
        }

        return $results;
    }

    function formatData($result, $class) {
        $array = array();
        if (isset($result[$class])) {
            $array = $result[$class];
            unset($result[$class]);
        }
        $array += $result;
        return $array;
    }
票数 0
EN

Stack Overflow用户

发布于 2014-12-15 13:27:06

在这种情况下,还可以使用contain和find as UserGroup.User来获得所需的结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10159465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档