0

Cakeがすべてのデータベースデータを同じ形式/構造で返すようにする方法を探しています...現在、関係に応じて2つの異なる形式を返します。

モデル 'B' がクエリされている現在のモデル 'A' に関連付けられている場合、下の [ユーザー] でわかるように、モデル 'B' のモデル関連付けがその下に配置されます。すべてのクエリがその構造を使用するようにしたい。

例: $this->find('all', .... 戻り値:

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

これを次のようにしたい:

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

3 に答える 3

0

CakePHP では、find()メソッドは最初のフォーマットのようなデータを返します。ただし、2番目のようにフォーマットしたい場合は、手動で処理する必要があります(可能であればこれを避けてください)

$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`
}
于 2012-04-15T16:25:02.123 に答える
0

これを行うことになった...出力を必要なものに変更します。トップレベルのアイテムにはヘッダーがありませんが、スクリプトを調整したところです...カスタムアイデアが必要な場合、これは他の誰かを助けるかもしれません

また、これがすべての可能な結果を​​カバーするという保証はありませんが、これまでのところ、すべてのクエリで機能します。

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;
    }
于 2012-04-16T06:43:28.140 に答える
0

この場合、目的の結果を得るために、find as UserGroup.Userとともに content を使用することもできます。

于 2014-12-15T05:27:06.223 に答える