我正在尝试构建一个显示用户备忘录表的视图。备忘录有一个类型(memo_type)和几个作者 - authors表由记录组成:id, memo_id, user_id, precedence
,MemoType是 id, memo_type_desc
。 (备忘录也有一个所有者(Memo.user_id),但这是一个简单的查询,我有一个单独的表工作正常)
我的想法是,当我查看有关用户的详细信息时,我会显示用户列为作者的所有备忘录的表格,并包含备忘录类型(信函,演示文稿等)
所以尽管我可以从read()获取我需要的数组,其中recursive = 3(参见下面的更多),这很慢并且检索到TON数据,所以我试图使用包含。 (我可以省略memo_type_desc,但最终用户想要它。)
好的,我将public $actsAs = array('Containable');
放在app_model.php
这里需要注意的一件事是,无论MemoTypes的附加关联程度如何,我都会获得相同的数组 - 当我添加 => array('MemoTypes.memo_type_desc')
时,我没有在数组中看到额外的级别。在第三级关联中,我也会收到错误:
警告(512):模型“备忘录”与模型“MemoTypes”无关[CORE / cake / libs / model / behavior / 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));
user.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
)
);
Memo.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
)
);
答案 0 :(得分:0)
嗯,更多的阅读,我终于'得到它'(在发布我的问题后只需一个小时的努力......有趣的是如何运作)。
用户和组向我提供我的主要信息,然后Memo让我构建一个“拥有”文档的表格,作者向我提供有关用户被列为作者的所有文档的数据!哇,在与CakePHP合作一年后,我现在才真正感激它:)
$this->set('user', $this->User->find('first', array(
'conditions' => array('User.id' => $id),
'contain' => array(
'Group',
'Memo',
'Author' => array(
'Memo' => array(
'MemoType' => array(
'fields' => array('memo_type_desc')
)
)
)
)
)));