次のクエリを実行しました。
$query = db_select('sage.USER', 'USER')
->fields('USER', array('USER_ID', 'OFFICE_ID', 'USER_PASSWORD'))
->range(0, 1);
$result = $query->execute();
...
$url = '/sage/office-' . $result->office_id;
$arguments = MigrateLinkFieldHandler::arguments(array('source_field' => 'office_id'));
$this->addFieldMapping('field_office_id', $url);
->arguments($arguments);
ただし、上記は機能しません。 「office_id」フィールドを「タイトル」として使用し、変数$ urlをリンク先のURLとして使用したいと思います。私はこれについて何をしました post
誰かが私の間違いを指摘してくれませんか?
編集:jduの回答を反映するように質問を更新しました。
これは私がノードをインポートした方法です:
その後、次のコードを使用できます。
$this->addFieldMapping('field_portrait_affiliation_link', 'field_portrait_affiliation_link');
$this->addFieldMapping('field_portrait_affiliation_link:title', 'field_portrait_affiliation_link:title');
$this->addFieldMapping('field_portrait_affiliation_link:attributes', 'field_portrait_affiliation_link:attributes');
$this->addFieldMapping('field_portrait_affiliation_link:language', 'language');
link.migrate.inc
ファイルはMigrate Extrasモジュールに含まれていません。これは Link module の一部です。
このファイルはLinkの安定版には存在しませんが、 dev release には存在しますこれを機能させるには、Linkの開発バージョンをインストールする必要があると思います。
Devバージョンをインストールしてもエラーが発生する場合は、ファイルが自動的に含まれていないことが原因と考えられます。その場合は、これをコードの先頭に追加してみてください。
module_load_include('inc', 'link', 'link.migrate');
[〜#〜]編集[〜#〜]
その他の質問 で述べたように、コードにわずかなエラーがあります。この行を変更する必要があります。
$result = $query->execute();
に:
$result = $query->execute()->fetchObject();
これは、クエリによって返された最初の結果を表すオブジェクトを返します。
クエリの実行結果を新しい変数に入力します。
$result = $query->execute();
$url = 'office-' . $result->office_id;
確認しましたか:/ admin/content/migrate/configure
リンクフィールドのフィールドハンドラーを確認します。
[x]リンクMigrateLinkFieldHandler link_field
Linkモジュールのdevバージョンをインストールします。その後、これはうまくいくはずです:
....
$arguments = array('title' => array('source_field' => 'office_id'));
$this->addFieldMapping('field_office_id', 'field_office_id_path')->arguments($arguments);
...
function prepareRow($row) {
$row->field_office_id_path = '/sage/office-' . $row->office_id;
}