Ich verwende migrate, um Commerce-Produkte aus einer CSV-Datei zu importieren. Die CSV-Datei hat keine eigene Seriennummer, daher verwende ich csvrownum, aber das funktioniert natürlich nicht, wenn es bereits Produkte gibt. Ich werde ständig von den CSV-Dateien migrieren und benötige daher eine echte Seriennummer. Die große Frage ist also, wie kann ich Migrate anweisen, eine eigene Seriennummer zu generieren? prepareRow
fühlt sich zu spät an, weil ich MigrateSQLMap anscheinend als Schlüsselfeld zur Verfügung stellen muss.
Hier ist eine grobe Version des Konstruktors der Klasse:
public function __construct() {
parent::__construct();
$this->description = t('Test CSV');
$columns = array(
array('product_name', 'title'),
array('url', 'url'),
array('price', 'price'),
);
$this->source = new MigrateSourceCSV('/tmp/test.csv', $columns, array('header_rows' => 1));
$this->destination = new MigrateDestinationCommerceProduct('commerce_product', 'product');
$this->map = new MigrateSQLMap($this->machineName,
array(
'csvrownum' => array(
'type' => 'int',
'not null' => true,
),
),
MigrateDestinationCommerceProduct::getKeySchema('commerce_product')
);
$this->addFieldMapping('product_id', 'csvrownum');
$this->addFieldMapping('title', 'title');
$this->addFieldMapping('field_url', 'url');
$this->addFieldMapping('commerce_price', 'price');
}
prepareRow
, sofern Sie das Feld als vierten Parameter in Ihrem Konstruktor angeben .
drush mr YourClassName
. Die Verwendungcsvrownum
als Schlüsselfeld sollte kein Problem sein, soweit es einzigartig ist ...