У меня проблема с CakePHP 1.3 и отношениями HABTM. У меня есть 2 модели, предложение и устройство. Предложение может быть на нескольких устройствах, а устройство может иметь несколько предложений. У меня есть модель devices_offer.php и таблица соединений. Что происходит, когда Предложение редактируется, оно создает 2-ю незавершенную запись, которая содержит редактирование как в таблице предложений, так и в таблице соединений. Оригинальное предложение остается прежним. Другое дело, что предложение также имеет отношения с бизнесом (модель). Бизнес владеет предложением. Причина, по которой я это говорю, заключается в том, что дублирующаяся запись предложения, созданная при редактировании предложения, НЕ содержит название компании в записи. Так что мне интересно, если эти отношения что-то испортили ... Кроме того, когда устройство редактируется, оно дублирует ВСЕ предложения, связанные с устройством, И сохраняет старые. Код на самом деле не более, чем запеченные контроллеры, и я следовал документам CakePHP, чтобы создать HABTM:
offer_controller.php (функция редактирования):
if ($this->Offer->save($this->data)) {
$this->Session->setFlash(__('The offer has been saved',true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The offer could not be saved. Please, try again.',true));
}
devicesOffer содержит:
var $belongsTo = array('Device' => array(
'className' => 'Device',
'foreignKey' => 'device_id',
'conditions' => '',
'fields' => '',
'order' => ''),
'Offer' => array(
'className' => 'Offer',
'foreignKey' => 'offer_id',
'conditions' => '',
'fields' => '',
'order' => ''
));
Предложение Модель:
var $hasAndBelongsToMany = array(
'Device' => array(
'className' => 'Device',
'joinTable' => 'devices_offers',
'foreignKey' => 'offer_id',
'associationForeignKey' => 'device_id',
'unique' => true,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => '',
'with' => 'DevicesOffer'
)
);
Модель устройства:
var $hasAndBelongsToMany = array(
'Offer' => array(
'className' => 'Offer',
'joinTable' => 'devices_offers',
'foreignKey' => 'device_id',
'associationForeignKey' => 'offer_id',
'unique' => true,
'conditions' => 'Offer.active = 1 AND Offer.expires > now()',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
UPDATE
У меня есть предложения, которые теперь редактируются / сохраняются правильно. Тем не менее, когда я обновляю / редактирую устройство. Все предложения, связанные с этим устройством, дублируются ТОЛЬКО в devices_offer. Я предполагаю, что это потому, что удостоверений личности там нет. Тем не менее, как бы я установить идентификаторы предложений, которые связаны с устройством при сохранении ??