我有三个模型 Theme、Color 和 ThemeColor(映射具有不同颜色的主题)
结构如下:
主题(id、名称、属性、图像)
颜色(ID、名称、代码、图像)
ThemeColor(主题id,颜色id,预览);//例如。预览 => x 主题,具有 a、b、c 颜色及其相关图像//
我已经烘焙了所有这些模型、 Controller 和 View ,
一切工作正常,除了我无法在 ThemeColor 模型中保存[预览]图像。
它与hasAndBelongToMany有关。
Array
(
[Theme] => Array
(
[name] => Black and blue
[theme] => black-blue
[description] =>
[status] => 1
[thumb] => Array
(
[name] => Koala.jpg
[type] => image/jpeg
[tmp_name] => F:\Xampp\tmp\phpEBE7.tmp
[error] => 0
[size] => 780831
)
)
[Color] => Array
(
[Color] => Array
(
[0] => 1
)
[Preview] => Array
(
[0] => test.png
)
)
)
我尝试过 saveAll() 但没有成功。是否有可能实现我想要实现的目标,或者我必须手动完成。
请指导。
最佳答案
不要使用 HABTM
处理具有额外属性的“拥有并属于多个”关系的最简单方法是遵守以下规则:
When a link table has more than 2 fields: make it a model
这意味着转换这个关系:
Theme <-habtm-> Color
进入:
Theme <-hasmany- ThemeColor
ThemeColor -belongsTo-> Color
ThemeColor -belongsTo-> Theme
这为您提供了更多控制权和更简单的代码/逻辑。当习惯关系适合你时,你仍然可以使用它,而当它不适合你时,你就不能使用习惯关系。
保存时的数据结构将是:
array(
'Theme' => array(...),
'ThemeColor' => array(
array('color_id' => x, 'preview' => y),
...
)
)
关于此 in the documentation 有更详细的注释.
关于php - Cakephp 在 HABTM 关系中保存额外的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17442465/