我不确定如何建立某种关联。
考虑以下模型:项目,文件夹,文件,所有者 (这是类似于我想要实现的类似的简化示例)
文件夹和文件是项目,项目有所有者。
数据库可能如下所示:
items
id, is_folder, is_file, field_common_to_folders_and_files
folders
id, item_id, special_folder_field
files
id, item_id, special_file_field
owners
id, name
items_owners
id, item_id, owner_id
所以...
Item hasAndBelongsToMany Owner
文件夹所属项目
文件belongesTo项目
...在文件控制器中:
$this->File->id = $id;
$data = $this->File->read();
pr($data);
输出:
[File] => Array (
[id] => 100
[item_id] => 150
[special_file_field] => 'Only files do this'
)
[Item] => Array (
[id] => 150
[is_folder] => 0
[is_file] => 1
[field_common] => 'Both folders and files do this'
)
...但是,假设items_owners中的条目,其中id = x,item_id = 150,owner_id = 10,我没有...
[Owner] => Array (
0 => Array (
[id] => 10
[name] => 'Me'
)
)
(我想要Cake获取File-> Item-> Owner)我错过了什么?
我尝试但另一种方法是在文件夹和文件中定义HABTM,但是当我需要它来使用item_id字段时,连接表中的item_id使用Folder和File的id字段,并且没有似乎是HABTM中的一个选项来覆盖它(你可以设置foreignKey和associationForeignKey,但不能设置主键[?])。
当然,一种可行的方法是在文件夹和文件中定义HABTM关系并创建两个连接表(folders_owners和files_owners),但我想寻求帮助因为1)我有更多的关系而不仅仅是老板,不想每个都有2个,2)这让我感到烦恼,因为感觉我错过了一些明显的东西。
非常感谢任何想法。
感谢。
答案 0 :(得分:0)
Synexis,您回答了自己的问题:
“我想要Cake获取File-> Item-> Owner”
我猜你的filesController表单目前是这样的(假设你使用的是FormHelper):
echo $this->Form->create('File');
echo $this->Form->input('id', array('hiddenField' => true));
echo $this->Form->input('special_file_field');
echo $this->Form->input('Owner', array('multiple' => 'checkbox');
在你的控制器中:
$this->File->saveAll($this->request->data);
相反,请将表单更改为以下内容:
echo $this->Form->create('Item');
echo $this->Form->input('id', array('hiddenField' => true));
echo $this->Form->input('File.id', array('hiddenField' => true));
echo $this->Form->input('File.special_file_field');
echo $this->Form->input('Owner', array('multiple' => 'checkbox');
在你的控制器中:
$this->File->id = $id;
$file = $this->File->read();
$this->File->Item->id = $file['File']['item_id'];
$data = $this->File->Item->read();
...
$this->File->Item->saveAll($this->request->data);
你有它。