Проблема с виджетом ComboBoxWidget в множественном режиме.
При любом изменении элемента, значения для множественного поля ComboBoxWidget создаются заново.
Т.к. данный виджет не передаёт id текущего значения в таблице, и мы всегда попадаем в блок создания связанных данных.
public function processEditAction()
{
if ($this->getSettings('MULTIPLE')) {
$sphere = $this->data[$this->getCode()];
unset($this->data[$this->getCode()]);
foreach ($sphere as $sphereKey) {
$this->data[$this->getCode()][] = array('VALUE' => $sphereKey);
}
}
parent::processEditAction();
}
Т.е. empty($referenceData['ID']) всегда true.
foreach ($referenceDataSet as $referenceData) {
if (empty($referenceData[$fieldWidget->getMultipleField('ID')])) {
// Создание связанных данных
if (!empty($referenceData[$fieldWidget->getMultipleField('VALUE')])) {
$result = $this->createReferenceData($reference, $referenceData);
if ($result->isSuccess()) {
$processedDataIds[] = $result->getId();
} else {
break; // ошибка, прерываем обработку данных
}
}
} else {
// Обновление связанных данных
$result = $this->updateReferenceData($reference, $referenceData, $referenceStaleDataSet);
if ($result->isSuccess()) {
$processedDataIds[] = $referenceData[$fieldWidget->getMultipleField('ID')];
} else {
break; // ошибка, прерываем обработку данных
}
}
}
@ASGAlex, если ещё никто не решил, хотел бы вернуться к этой задаче. Подтверждаете ли вы вообще наличие бага? Мои предыдущие ишью были отклонены. Почему? Ответьте, пожалуйста, и я учту это в новом пулл-реквесте.
@denx-b по предыдущим багрепортам: один мерджреквест был принят и замерджен, другой вы сами закрыли. Больше никаких от вас не вижу... На счет бага - там со связанными данными все как-то совсем плохо. Недавно залез в код, поднял тестовый пример - в общем, похоже, авторы ориентировались на некое ограниченное число кейсов, а остальное работает (или не работает) исключительно "по инерции". В общем, дописывать/разгребать там придётся прилично. Я начал пока с OrmElementWidget, но и у ComboBox, видимо, болезнь та же.
@ASGAlex, ну как же :) Про тот, что был смерджен я помню и да, был, который я сам отменил. Но вот решение этой ишью https://github.com/DigitalWand/digitalwand.admin_helper/pull/106
Так давно было, я уже сам не помню нюансов, но это работало и очень хорошо, я задачу решил дважды, немного разными способами. Поэтому #106 совсем хорошо должен быть.