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');
}
drush mr YourClassName
. Die Verwendungcsvrownum
als Schlüsselfeld sollte kein Problem sein, soweit es einzigartig ist ...prepareRow
, sofern Sie das Feld als vierten Parameter in Ihrem Konstruktor angeben .Antworten:
Inzwischen habe ich das herausgefunden. Das zweite Argument von
MigrateSQLMap
ist ein Feld => Schema-Array, und Sie können diese Felderfunction prepareKey($source_key, $row)
beispielsweise nach Bedarf ausfüllenHinweis :
prepareRow
Sie möchten zu spätprepareKey
.quelle
Sie müssen das nicht
product_id
explizit zuordnen. Sie sollten in der Lage sein, diese Zeile einfach zu löschen:Auf der anderen Seite benötigen Sie eine SKU. Wenn Sie sich darauf verlassen, dass
csvnumrow
die externe ID bedeutet, dass Sie niemals ein Produkt aus der CSV entfernen können, fügen Sie am Ende einfach etwas mehr hinzu. Ich würde dringend empfehlen, eine zuverlässige externe ID zu finden ICH WÜRDE.quelle