ユーザーのメモの表を表示するビューを作成しようとしています。メモにはタイプ (memo_type) と複数の作成者があります。作成者テーブルはレコードで構成されて id, memo_id, user_id, precedence
おり、MemoType は id, memo_type_desc
です。(メモには所有者 (Memo.user_id) もありますが、これは単純なクエリであり、問題なく動作する別のテーブルがあります)
アイデアは、ユーザーに関する詳細を表示するときに、ユーザーが作成者としてリストされているすべてのメモの表を表示し、メモの種類 (レター、プレゼンテーションなど) を含めることです。
したがって、recursive=3 の read() から必要な配列を取得できますが (以下の詳細を参照)、これは遅く、大量のデータを取得するため、contain を使用しようとしています。( memo_type_desc を省略することもできますが、エンドユーザーはそれを望んでいます。)
よし、入れpublic $actsAs = array('Containable');
たapp_model.php
ここで注意すべき重要な点は、MemoTypes の追加レベルの関連付けに関係なく、同じ配列が返されることです。追加 => array('MemoTypes.memo_type_desc')
しても、配列に追加レベルは表示されません。そして、この第 3 レベルの関連付けでは、エラーも発生します。
警告 (512): モデル "Memo" はモデル "MemoTypes" に関連付けられていません [CORE/cake/libs/model/behaviors/containable.php、343 行目
モデルの関連付けは次のとおりです。user_controller の View 関数は次のとおりです。私の Memo/MemoTypes 関連付けまたは find() 構文の何が問題なのですか?
編集:ああ、私はケーキの初心者で、このアプリケーションを継承しました。PS、テーブルはview.ctpのforeachによって構築されていますが、ページネーションは確かに優れていますが、どこから始めればよいかわかりません。=O
// Trying to get Containable method to work...
$this->set('userstuff', $this->User->find('all', array(
'conditions' => array('User.id' => $id),
'contain' => array(
'Author.user_id',
'Author.precedence',
'Author.memo_id' => array(
'Memo.memo_type_id' => array(
'MemoTypes.memo_type_id' // <--problem here?
)
)
)
)));
結果:
Array
(
[0] => Array
(
[User] => Array
(
[id] => 1026
[group_id] => 2
[name] => John Doe
[username] => jd20001
[grpnum] => 99
[created] => 2010-03-22 15:08:35
[modified] => 2012-04-05 13:31:15
)
[Author] => Array
(
[0] => Array
(
[user_id] => 1026
[precedence] => 0
[memo_id] => 2579
[Memo] => Array
(
[memo_type_id] => 1
)
)
[1] => Array
(
[user_id] => 1026
[precedence] => 0
[memo_id] => 2583
[Memo] => Array
(
[memo_type_id] => 1
)
)
[2] => Array...
もっと:
// Works, but retrieves entire users/memos tables so large memory footprint
$this->User->recursive = 3;
$this->set('user', $this->User->read(null, $id));
ユーザー.php:
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id'
)
);
var $hasMany = array(
'Author' => array(
'className' => 'Author',
'foreignKey' => 'user_id',
'dependent' => true
),
'Memo' => array(
'className' => 'Memo',
'foreignKey' => 'user_id',
'dependent' => false
)
);
メモ.php:
var $hasMany = array(
'Author' => array(
'className' => 'Author',
'foreignKey' => 'memo_id',
'dependent' => true,
'order' => 'precedence'
)
);
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
),
'MemoType' => array(
'className' => 'MemoType',
'foreignKey' => 'memo_type_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
Memo_type.php:
var $hasMany = array(
'Memo' => array(
'className' => 'Memo',
'foreignKey' => 'memo_type_id',
'dependent' => false
)
);