У меня есть три темы моделей, цвет и ThemeColor (который отображает темы, доступные с разными цветами)
Структурированные как:
Тема (id, имя, свойства, изображение)
Цвет (id, имя, код, изображение)
ThemeColor (theme_id, color_id, предварительный просмотр); // например. Preview => x тема с цветами a, b, c и связанным ими образом //
Я испек все эти модели, контроллеры и представления,
Все работает хорошо, но я не могу сохранить изображение [preview] в ThemeColor Model.
Это связано с 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 (), но это не сработало. Возможно ли, что я добиваюсь, или мне придется просто сделать это вручную.
Пожалуйста, направляйте.
Самый простой способ обработки отношений has-and-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), ... ) )
Более подробная информация об этом содержится в документации .