Вы хотите "подделать" Руби через ассоциацию с CakePHP.
Почему это через HABTM?
Потому что вы хотите сохранить данные об ассоциации. С Cake HABTM сохранение данных об ассоциации затруднено, потому что единственное, что у вас есть, - это таблица JOIN
. Вам нужно что-то более мощное, чем это.
Во-первых, избавьтесь от свойства $hasAndBelongsToMany
в вашей модели. Далее мы переоборудуем вашу таблицу release_server_to_components
в качестве таблицы «сквозного».
Итак, в ReleaseComponent
и ReleaseServer
модели вы бы имели такую ассоциацию:
$hasMany = array('ReleaseServerToComponent');
Теперь в вашей новой модели ReleaseServerToComponent
у вас будет ассоциация, подобная этой:
$belongsTo = array('ReleaseComponent', 'ReleaseServer');
Теперь вы можете получить доступ к этой таблице, как и в обычной модели Cake, то есть $this->ReleaseServer->ReleaseServerToComponent->find()
. Вы можете добавить дополнительные поля в сквозную таблицу, например server_component_name
. У вас уже есть уникальный идентификатор для конкретных серверных компонентов с первичным ключом таблицы release_server_to_components
.
Вы можете сохранить эти данные, используя Cake's saveAll()
метод . В качестве альтернативы вы можете сгенерировать свои собственные данные для сохранения, просто вставив идентификатор сервера и идентификатор компонента из полей формы. В верхней части этой ссылки находится формат сохраненных данных, когда вы передаете их в метод сохранения модели.