Несколько вещей, которые я заметил:
A. Является ли $this->data['Charity']['charities']
массивом с именованными ключами, соответствующими столбцам таблицы? Потому что внутри цикла foreach () вы берете ключ и помещаете его в массив $data['Charity']
. Результатом может быть неправильный формат. Массив $ data для сохранения модели обычно форматируется как $data['Charity']['NAME_OF_COLUMN1], $data['Charity']['NAME_OF_COLUM2]
и т. Д. Для каждого столбца, который требуется сохранить. Итак, если ключи являются числами, то у вас может быть что-то вроде: $data['Charity'][0], $data['Charity'][1]
, что неправильно.
B. Ассоциации HABTM сохраняются по-разному. Я рекомендую вам взглянуть на раздел книги по сохранению HABTM . Я сохраняю отношение HABTM следующим образом (предполагая отношение между пользователями и купонами):
$this->data['Coupon'] = array('id' => 1, 'code' = 'BlaBla');<br>
$this->data['User'] = array('id' => 33);<br>
$this->Coupon->save($this->data, false);
Итак, как вы можете видеть, массив $ data имеет подмассив, названный в честь внешней модели ('User') со столбцами + значениями, которые я хочу сохранить. Затем я сохраняю этот массив в модели Coupon.
C. Имейте в виду, что CakePHP всегда удаляет старые записи и вставляет новые в таблицу соединений , когда он «обновляет» отношения HABTM. Чтобы избежать этого, вы устанавливаете для поля «unique» значение false в конфигурации $ HABTM модели.