以前に整理されたものだと確信しているので、これに対する答えを探してみましたが、モデルから返されたデータを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',
)
)
モデルデータの呼び出し方法を変更して、メインモデルであるか関連モデルであるかに関係なく、異なるコントローラーで一貫した方法で渡すことができる方法はありますか? それとも、毎回データを繰り返し処理し、正しい形式でデータを再構築する必要がありますか? これは、データセットが大きくなると、効率の問題になるようです。