CakePHP HABTM JoinTable с дополнительным полем - PullRequest
0 голосов
/ 15 июля 2011

Итак, у меня есть таблица клиентов, таблица контактов и таблица контактов contacts_customers, которая также имеет поле contact_type_id, которое отображается в таблицу contact_type. Я использовал информацию, связанную с дополнительным полем Обновление CakePHP в таблице соединений HABTM , в попытке найти решение, но оно работает только частично. Я изменил метод add() в ContactCustomersController на

$this->ContactsCustomer->Contact->save($this->data);
$this->ContactsCustomer->create();
if ($this->ContactsCustomer->save($this->data,
   array('validate' => 'first'))) {
       $this->Session->setFlash(__('The contacts customer has been saved', true));
   $this->redirect(array('controller' => 'contacts_customers', 'action' => 'index'));
} else {
   $this->Session->setFlash(__('The contacts customer could not be saved. Please, try again.', true));
}

Обратите внимание на сохранение из двух частей; это связано с тем, что при использовании метода saveAll() модели ContactsCustomer произошел сбой без каких-либо указаний на проблему (все, что отображалось в журнале SQL на странице результатов, было BEGIN, за которым сразу следовал ROLLBACK). Здесь я предположил, что это связано с ограничением внешнего ключа между таблицей contacts и таблицей contacts_customers, поэтому я выбрал сохранение из двух частей.

В любом случае в текущем коде не сообщается об ошибках, но конечным результатом является то, что соответствующая информация сохраняется в таблице contacts, но ничего не сохраняется в таблице соединения contacts_customers. Представленные данные, по-видимому, соответствуют данным журнала FireBug:

_method POST
data[Contact][address_1]    asdsad
data[Contact][address_2]    
data[Contact][city] asdasd 
data[Contact][email]    jb@sc.net
data[Contact][fax]  
data[Contact][first_name]   Joe
data[Contact][last_name]    Blow
data[Contact][mobile_phon...    
data[Contact][office_phon...    sdfsdfdf
data[Contact][postal_code...    121212
data[Contact][state]    asdas
data[Contact][title]    
data[ContactsCustomer][ContactType] 
data[ContactsCustomer][ContactType][]   1
data[ContactsCustomer][ContactType][]   2
data[ContactsCustomer][ContactType][]   3
data[ContactsCustomer][Customer]    1

Что я здесь неправильно сделал? Большое спасибо за любую помощь!

Соответствующие данные модели:

contact.php

var $hasMany = array(
    'ContactsCustomer'
);

contact_types.php

var $hasMany = array(
    'ContactsCustomer'
);

customer.php

var $hasMany = array(
    'ContactsCustomer'
);

contacts_customer.php

var $belongsTo = array(
    'Contact', 'ContactType', 'Customer'
);

1 Ответ

0 голосов
/ 16 июля 2011

еще не проверял, но я думаю, что $ this-> data могли быть изменены при первом сохранении.Просто используйте дополнительную переменную для хранения этих данных.

...