移行を使用して、CSVファイルからコマース製品をインポートしています。CSVファイルには独自のシリアルがないため、csvrownumを使用していますが、すでに製品がある場合は明らかに機能しません。CSVファイルから常に移行するため、実際のシリアルが必要です。したがって、大きな問題は、Migrateに独自のシリアルを生成するように指示するにはどうすればよいですか?prepareRow
MigrateSQLMapにキーフィールドを指定する必要があるように見えるので、手遅れだと感じています。
クラスのコンストラクタの大まかなバージョンは次のとおりです。
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');
}
AFAIK
—
drcelus 2013年
prepareRow
では、コンストラクタで 4番目のパラメータとしてフィールドを提供する限り使用できます。
drush mr YourClassName
。csvrownum
キーフィールドとして使用することは、それが一意である限り問題になりません...