У меня есть приложение Cakephp 1.3, и у меня есть следующая настройка:
Таблица, названная выбросами с этой моделью:
class Emission extends AppModel { var $name = 'Emission'; var $displayField = 'name'; }
И таблица с названием «эмиссионные сообщения» с этой моделью:
class EmissionMessage extends AppModel { var $name = 'EmissionMessage'; var $belongsTo = array ( 'Emission' => array ( 'className' => 'Emission', 'foreignKey' => 'emission_id' ) ); }
В таблице эмиссионной_измещения есть поле, называемое эмиссионным кодом для внешнего ключа.
Когда я создаю новый экземпляр эмиссии, мне нужно создать новый экземпляр эмиссионного сообщения одновременно, то есть: в том виде, в котором я бы ввел новую эмиссию в свою базу данных, мне понадобятся входные данные излучения, связанные с этим то же излучение. То же самое относится к форме редактирования.
Я думаю, что я сделал это неправильно, потому что я могу «вручную» вставить в таблицу emission_message с соответствующим идентификатором после создания эмиссии, но я предполагаю, что это неправильный путь и что cakePHP должен делать это автоматически. Я не знаю, как назвать мои данные в форме, чтобы информация сохранялась должным образом или если мои модели ошибочны, и поэтому она не работает.
РЕДАКТИРОВАТЬ:
Чтобы сделать вещи более ясными: Emission и EmissionMessage находятся в отношениях один к одному, добавив, что hasOne to Emissions заставил его работать на полпути, теперь я могу сохранить поля, используя:
echo $this->Form->input('EmissionMessage.field');
Но когда я пытаюсь обновить одну и ту же запись, действие edit () просто сохраняет данные в новой строке (с внешним ключом, но в новой строке вместо обновления предыдущего)
Чтобы сохранить поля, которые я использую:
$this->Emission->saveAll($this->data)
И в действиях edit () и add () (вставка и обновление)
EDIT 2: Кажется, что скрытый ввод с идентификатором таблицы EmissionMessage сделал трюк (раньше я не делал этого правильно, как только я исправил это, он работал нормально), поскольку этот ответ подсказывает: saveAll () вставляет новую строку вместо обновления
Мне очень странно, что мне нужно добавить этот скрытый ввод, но, по крайней мере, это решает проблему.