Restaurar relaciones entre nodos al usar el módulo de migración en Drupal 7

Actualmente estoy trabajando en un módulo de migración en el que uso diferentes fuentes XML (suministradas por un proveedor externo) para importar un programa de cine. Obtengo archivos separados para películas, teatros y horarios como este (simplificado):

<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>

Ya puedo importar todos los datos necesarios y crear nodos para cada tipo. EXCEPTO las relaciones entre ellos. No estoy seguro de qué tipo de campo debo usar para esto. Actualmente estoy usando referencias de entidades, pero no tengo ni idea de cómo configurarlas correctamente y si son la mejor opción para este tipo de aplicación. El plan es mostrar la información de la hora de presentación según las películas o los cines (por ejemplo, mostrar todas las películas que se reproducen actualmente en el cine seleccionado o mostrar todos los cines para una película determinada. Otra pregunta relacionada. ¿Debo sobrescribir los ID de nodo (nid) con los ID dados de el xml (¿se guarda esto?) o debo crear diferentes campos para ellos?

¡Gracias de antemano por cualquier ayuda! Si se necesita más información, responderé de inmediato;)

Saludos, Satara


Solución

Solo tuve que usar el fuenteMigración() función con la clave de migración definida en la matriz 'migraciones' en la anulación del archivo migrate_api() como parámetro). Ahora las identificaciones se asignan correctamente en los campos de referencia_entidad:

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

preguntado el 03 de diciembre de 13 a las 12:12

1 Respuestas

Si solo tiene la intención de usar nodos, también puede usar referencias de nodos: https://drupal.org/project/references

Que ha existido por mucho más tiempo y tal vez más fácil de configurar. Crearía un tipo de nodo Showtime que tenga 2 campos de referencia de nodo. Uno para hacer referencia a películas y el otro para hacer referencia a teatros.

Una vez que haya creado sus tipos de nodos, primero debe migrar películas y cines y luego puede hacer referencia a ellos al migrar los horarios. Puede hacer esto al mapear los campos de referencia del nodo. Migrar asignará la identificación del elemento anterior a la identificación del nodo recién creado. Eche un vistazo a esta documentación (https://drupal.org/node/1133448) bajo el subtítulo sourceMigration.

Personalmente, no forzaría a los nid. No es necesario que Migrate cree tablas de asignación para que pueda averiguar qué elemento se asigna a qué nodo de todos modos.

Respondido el 03 de diciembre de 13 a las 17:12

Gracias por su rápida respuesta. Lo tengo funcionando ahora. Decidí continuar usando el módulo entity_reference porque todavía está en desarrollo activo en contraste con node_reference. - Satara

Todavía se mantiene activamente. Ahora es un submódulo de referencias. drupal.org/proyecto/referencias pero sí, ya no se está desarrollando ya que está en un estado estable. - Nickwshaw

En primera notas de la versión de las referencias 7.x-2.0 dicen que lo más probable es que quede obsoleto en un futuro próximo y que la entidad_referencia probablemente debería considerarse primero en proyectos D7 nuevos. Dado que esta entrada es bastante antigua, tal vez decidieron conservarla. - Satara

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.