フィールドspecial
のようにフィールドnid
にIDを出力する対応するIDを持つフィールドがあるソースを指定すると、ノードIDが返されます。
新しいサイトに既に存在し、移行されていない分類用語にマッピングしたい。
これは私のカスタムymlファイルのプロセス部分です:
process:
nid: nid
vid: vid
# there were some more fields here that I left out.
# hardcode destination node type as publication
type:
plugin: default_value
default_value: publication
# custom fields
field_special:
plugin: static_map
source: special
map:
1: 1
2: 2
3: 3
field_special
移行先のノードの分類用語参照フィールドとして。
分類用語参照フィールドである宛先フィールドで使用されるソースフィールドをどのようにマッピングできますか?
Drupal 8.1.2で、migrate_plus migrate_tools migrate_drupalを有効にして使用しています。
私は私のymlを使用するように書き直しました:
field_special:
plugin: iterator
source: field_special
process:
target_id: tid
そして、クラスにpreparerow関数を記述して、配列をソースプロパティとして出力します。
/**
* {@inheritdoc}
*/
public function prepareRow(Row $row) {
$nid = $row->getSourceProperty('nid');
$result = $this->getDatabase()->query(
'SELECT
GROUP_CONCAT(field_special_tid) as tids
FROM
{field_data_field_special} fs
WHERE
fs.entity_id = :nid
',
array(':nid' => $nid)
);
foreach ($result as $record) {
if (!is_null($record->tids)) {
$row->setSourceProperty('special', explode(',', $record->tids));
}
}
return parent::prepareRow($row);
}
この回避策は今のところ機能しますが、より良い答えがある場合は投稿してください。