Проблема дублирования CakePHP HABTM - PullRequest
0 голосов
/ 29 марта 2012

У меня проблема с 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. Я предполагаю, что это потому, что удостоверений личности там нет. Тем не менее, как бы я установить идентификаторы предложений, которые связаны с устройством при сохранении ??

...