web-dev-qa-db-ja.com

ローカル変数を含むリンクフィールド(「タイトル」と「URL」)を移行する方法は?

次のクエリを実行しました。

$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の回答を反映するように質問を更新しました。

2
chlong

これは私がノードをインポートした方法です:

  • リンク7.x開発バージョンからlink.migrate.incをダウンロードし、このファイルをモジュールに追加します
  • .infoモジュールにファイルエントリを追加します(files [] = link.migrate.inc)
  • このパッチを適用 link-migrate_subfields.patch
  • その後、次のコードを使用できます。

    $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');
    
3
Vlad Moyseenko

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();

これは、クエリによって返された最初の結果を表すオブジェクトを返します。

3
Clive

クエリの実行結果を新しい変数に入力します。

$result = $query->execute();

$url = 'office-' . $result->office_id;
1
jdu

確認しましたか:/ 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;
}
0
lenni