在Drupal 7中使用迁移模块时,恢复节点之间的关系

时间:2013-12-03 12:46:16

标签: xml drupal drupal-7 migrate

我目前正在开发一个迁移模块,我使用不同的XML源(由外部提供商提供)来导入电影院节目。我得到了电影,剧院和放映时间的单独文件,如下所示(简化):

<Movies>
 <Movie>
  <movieid>14652</movieid>
  <title>Movie Title</title>
 </Movie>
</Movies>

<Theaters>
 <Theater>
  <theaterid>75102</theaterid>
  <description>Blabla</description>
 </Theater>
</Theaters>

<Showtimes>
  <Showtime>
    <showtimeid>147001169</showtimeid>
    <movieid>14652</movieid>
    <theaterid>75102</theaterid>
    <date>2013-12-02 20:15</date>
  </Showtime>
</Showtimes>

我已经能够导入所有需要的数据并为每种类型创建节点。除了他们之间的关系。我不确定我应该使用哪种字段。目前我正在使用实体引用,但我不知道如何正确设置它们以及它们是否是这种应用程序的最佳选择。计划是根据电影或剧院显示节目时间信息(例如,显示当前在所选剧院中播放的所有电影或显示给定电影的所有影院。 另一个相关问题。我应该用xml中的给定id覆盖节点ID(nid)(这是保存吗?)还是我应该为它们创建不同的字段?

提前感谢您的帮助! 如果需要更多信息,我会立即回答;)

祝你好运, 萨塔拉


解决方案

我只需使用 sourceMigration()函数,并在migrate_api()文件的覆盖中将'migrations'数组中定义的迁移键作为参数)。现在,id在entity_refernce字段中正确映射:

$this->addFieldMapping('field_showtime_movie', 'movieid')->xpath('movieid')->sourceMigration('Movie');
$this->addFieldMapping('field_showtime_theater', 'theaterid')->xpath('theaterid')->sourceMigration('Theater');

1 个答案:

答案 0 :(得分:1)

如果您只打算使用节点,您还可以使用节点引用: https://drupal.org/project/references

这已经存在了很长时间,可能更容易设置。我将创建一个具有2个节点引用字段的Showtime节点类型。一个参考电影,另一个参考电影院。

创建节点类型后,您应首先迁移电影和影院,然后在迁移放映时间时引用它们。映射节点引用字段时可以执行此操作。 Migrate会将旧项ID映射到新创建的节点ID。在子标题sourceMigration下查看此文档(https://drupal.org/node/1133448)。

我个人不会强迫这个。没有必要迁移将创建映射表,以便您可以找出哪个项目映射到哪个节点。