Cakephp在HABTM关系中保存额外属性

时间:2013-07-03 07:48:20

标签: php cakephp

我有三个模特主题,颜色和主题颜色(用不同颜色映射主题)

结构如下:

主题(id,name,properties,image)

颜色(id,名称,代码,图像)

ThemeColor(theme_id,color_id,preview); //例如preview => x主题与a,b,c颜色及其相关图像//

我已经烘焙了所有这些模型,控制器和视图,

除非我无法在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()但是没有用。是否有可能实现我的目标,或者我必须手动完成。

请指导。

1 个答案:

答案 0 :(得分:4)

不要使用HABTM

使用额外属性处理has-and-belongs-to-many-many关系的最简单方法是遵守此规则:

  

当链接表包含两个以上的字段时:将其设为模型

这意味着转换这种关系:

Theme <-habtm-> Color

分为:

Theme <-hasmany- ThemeColor
ThemeColor -belongsTo-> Color
ThemeColor -belongsTo-> Theme

这为您提供了更多控制,更简单的代码/逻辑。当它适合你时,它仍然可以使用habtm关系,而不适用于它。

保存时的数据结构为:

array(
    'Theme' => array(...),
    'ThemeColor' => array(
        array('color_id' => x, 'preview' => y),
        ...
    )
)

有关此in the documentation的详细说明。