0

以前に整理されたものだと確信しているので、これに対する答えを探してみましたが、モデルから返されたデータをcakephpがフォーマットする方法について議論しているものは見つかりませんでした。通常、データがどのように来るかを確認し、必要に応じて各コントローラー/ビューを処理します。ただし、この場合、ビューを再利用したいのですが、残念ながら、cakephp がさまざまなコントローラーからデータを渡す方法が問題を引き起こしています。

次のように関連付けられた2つのモデルがあります。

class Group extends AppModel {
public $hasMany = array(  'User' ); 
}

class User extends AppModel {
public $belongsTo = array(
'Group'  ); 
}

View/Groups/view/id 個々のグループの詳細と、グループに属するユーザーのリストを表示したいと考えています。理想的には、ユーザー リストを表示するコードを再作成したくありません。View/Users/index

$this->extend('/Users/index') を使用できることがわかりましたが、私が望むように `$this->set('users',$group['User']) だけを使用することはできません。アレイの構築方法が異なるためです。

UsersController::index() では$users = $this->find('all');、次のようなユーザーのリストを提供する呼び出しを行います。debug($users);

array(
(int) 0 => array(
    'User' => array(
        'id' => '100',
        'group_id' => '101', 
    )
),
(int) 1 => array(
    'User' => array(
        'id' => '101',
        'group_id' => '101',
    )
)
)

GroupsController では $this->Group->contain(array('User')); を使用します。$group = $this->GroupsController->Group->find('first','conditions'=>array('id'=>$id);

グループのリストを返しますが、代わりにこの形式でdebug($group['User']);

 'User' => array(
    (int) 0 => array(
        'id' => '101',
        'group_id' => '101', 
    ),
    (int) 1 => array(
        'id' => '100',
        'group_id' => '101',

    )
)

モデルデータの呼び出し方法を変更して、メインモデルであるか関連モデルであるかに関係なく、異なるコントローラーで一貫した方法で渡すことができる方法はありますか? それとも、毎回データを繰り返し処理し、正しい形式でデータを再構築する必要がありますか? これは、データセットが大きくなると、効率の問題になるようです。

4

2 に答える 2

0

実際、配列を手動で変更することはお勧めできません。モデルが関連データを返す方法に影響を与えようとすることもお勧めできません。

私が思いつくことができる最高のものは次のとおりです。

ユーザー インデックスに次のようなものがあると仮定します。

foreach($users as $user) {
    debug($user['User']); // made up for brevity
}

foreachブロックの先頭に次を追加します。

if (!isset($user['User']) {
    $user = array('User' => $user);
}

それほど費用はかからないようです。

于 2013-04-23T00:13:24.347 に答える