Перенос измерений
Я пытаюсь перейти в поле физических измерений, но безуспешно. Я подготовлю данные в prepareRow, но до этого я просто пытался понять, как это должно работать. Я попытался установить значения по умолчанию следующим образом:
$this->addFieldMapping('field_productdimensions')->defaultValue(4);
$this->addFieldMapping('field_productdimensions:width')->defaultValue(1);
$this->addFieldMapping('field_productdimensions:length')->defaultValue(2);
$this->addFieldMapping('field_productdimensions:height')->defaultValue(3);
$this->addFieldMapping('field_productdimensions:unit','cm');
Вышеизложенное не содержало никаких данных. Я также пробовал использовать значения в prepareRow следующим образом:
$current_row->dimensions = array(
'length' => 1,
'width' => 2,
'height' => 3,
'unit' => 'cm'
);
Все остальные поля вставлены правильно. Есть идеи, что я делаю не так?
2 answers
Я понял это, хотя кажется странным, что ширина получает значение длины, вот как это работает в моем случае. В функции подготовки больше ничего не требовалось.
$this->addFieldMapping('field_productdimensions','width');
$this->addFieldMapping('field_productdimensions:width','length')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:length','length')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:height','height')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:unit','length_units');
Поскольку я боролся с этой проблемой сегодня, вам действительно нужно исключить сопоставление длины, иначе ваша миграция завершится неудачей, и все ваши поля будут пустыми.
$this->addFieldMapping('field_productdimensions','length')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:width','width')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:height','height')->defaultValue(null);
$this->addFieldMapping('field_productdimensions:unit','length_units')->defaultValue('mm');
Также обратите внимание, что значение, которое вы пытаетесь ввести, является строго целым числом. Значение с пробелом за ним не будет работать.