Приветствую!
Есть такой кусок кода
$team = array();
foreach ($post['members'] as $member) {
if (!isset($member['member'])) {
continue;
}
$member['travel_id'] = $tid;
$team[] = $member;
$model_member->insert($member);
}
$model_member->multipleInsert($team);
Если остановиться на последней из приведенных выше строк, то видно следующее:

А после полного выполнения всего этого дела, в БД появляются следующие записи:

Т.е.
insert($member) отрабатывает нормально, а
multipleInsert($team) дублирует первый элемент передаваемого массива.
Хотел было уже кляузу в ошибки строчить, но подумалось вдруг это я где-то что-то упустил... Подскажите, пжста.
Спасибо.
внутри foreach для отладки вставлено? В окончательном варианте его не будет там?
Угу, именно. Просто с разных сторон смотрел, чтоб понять где ерунда происходит. Ну и для наглядности результата.
Посмотри не конфликтует ли с индексами таблицы, возможно метод multipleInsert переопределен в модели т.ч. нужно анализировать код + запрос выполняет адаптер $this->adapter->multipleInsert т.ч. проблема не в самом waModel.
Да нет, с моделью все в норме. Копнул чуть поглубже - проблема возникает на уровне функции multipleInsert($data) класса WaModel. И проявляется это только в случае когда элементы передаваемого массива содержат разный набор полей. Собственно именно это в моем случае и происходит.
И вдогонку... Даже если состав полей одинаков, но порядок этих полей разный в разных элементах передаваемого массива, то тоже чудеса случатся. Так что если кто пользуется - осторожнее, надо об этом помнить пока исправление не вышло.
Массив точно ассоциативный (слово "порядок" заставляет подозревать...)? И зачем в разных элементах массива передавать разные наборы полей? Может, стоит привести к общему виду все элементы (хотя бы для порядка, что ли).
Ну да. Это, правда, теоретическая выкладка, на практике не проверял, но там поля в multipleInsert складываются в отдельный массив на основе ключей первого элемента передаваемого массива. А значения, как понимаю глядя на результат в моем случае, в другой. Ну и подразумевается что и во всех последующих элементах этот порядок остается неизменным. Т.е. значения каждого переданного элемента массива будут записываться по порядку, а поля будут соответствовать порядку полей первого элемента. Повторюсь, это теоретическая выкладка. Но проверить не сложно.
Ну вроде как да, с одной-то стороны... А с другой - вот этот конкретный пример вполне приличный, с т.з. порядка, имхо. Данные получены из формы с чекбоксами, отсюда и расхождение в составе полей у разных элементов, т.к. у одних элементов одни опции отмечены, у других - другие. С т.з. SQL никаких претензий. insert($data) тоже проглатывает нормально (и это правильно). Проблема только в логике multipleInsert($data). Нет, можно конечно усилием воли объявить что это не баг а фича, но тогда уж и в доке это все расписать, чтоб сюрпризов не было. А на данный момент описание соответствует только части действительности, хоть и наиболее встречаемой. Так что, имхо, ошибка.