2

我有三个模型主题、颜色和主题颜色(映射不同颜色的主题)

结构如下:

主题(id、名称、属性、图像)

颜色(ID、名称、代码、图像)

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

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

除了我无法在 ThemeColor 模型中保存 [preview] 图像外,一切都运行良好。

它与 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() 但这没有用。是否有可能实现我想要实现的目标,或者我将不得不手动完成。

请指导。

4

1 回答 1

4

不要使用HABTM

处理具有额外属性的 has-and-belongs-to-many 关系的最简单方法是遵守以下规则:

当链接表的字段超过 2 个时:将其设为模型

这意味着转换这种关系:

Theme <-habtm-> Color

进入:

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

这为您提供了更多控制权和更简单的代码/逻辑。仍然可以在适合您的情况下使用 habtm 关系,而不是在不适合的情况下使用。

保存时的数据结构将是:

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

文档中对此有更详细的说明。

于 2013-07-03T08:19:21.443 回答