CakePHP Model Query Return Data Formating

做~自己de王妃 提交于 2019-12-12 03:22:15

问题


I'm looking for a way to make it so cake returns all database data in the same format/structure... Currently it returns two different types of format depending on the relationship.

If a model 'B' is associated with the current model 'A' being queried it will then place model associations for 'B' underneath it as you can see in [User] below. I want it so that all queries use that structure.

example: $this->find('all', .... returns:

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
                         (
                         )
               )
       )

I want this to look like:

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
                                   (
                                   )
                            )
                     )
               )
       )

回答1:


In CakePHP, the find() method return data like your first format. But If you want to format like second one then you have to process it by hand (try to avoid this if possible)

$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`
}



回答2:


ended up doing this... it changes the output to what we need. The top level item does not have a header which is fine I just adjusted our scripts for that... maybe this will help somebody else if they need a custom idea

also no guarantee this covers all possible results but so far it works with all the queries we have.

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;
    }



回答3:


You can also use contain in this case along with find as UserGroup.User for your desired result



来源:https://stackoverflow.com/questions/10159465/cakephp-model-query-return-data-formating

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!