我不确定如何建立某个协会。
考虑以下模型:项目、文件夹、文件、所有者(这是一个类似于我想要实现的东西的简化示例)
文件夹和文件是项目,项目有所有者。
数据库可能如下所示:
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
所以...
- 项目有一个文件夹(如果是_文件夹)
- 项目有一个文件(如果是_file)
项目 hasAndBelongsToMany 所有者
文件夹属于项目
文件属于项目
...在文件控制器中:
$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 使用文件夹和文件的 id 字段,并且似乎没有是 HABTM 中的一个选项来覆盖它(您可以设置 foreignKey 和 associationForeignKey,但不能设置主键[?])。
当然,一种可行的方法是在文件夹和文件中定义 HABTM 关系并创建两个连接表(folders_owners 和 files_owners),但我想寻求帮助,因为 1)我有更多的关系,而不仅仅是所有者和不'不想每个都有 2 个,并且 2)这让我很烦恼,因为感觉就像我错过了一些明显的东西。
任何想法将不胜感激。
谢谢。