Usando el módulo Migrate: entiendo que prepareRow () ejecuta un filtro en la fila y debe devolver VERDADERO o FALSO en función de algunas condiciones, lo que permite migrar una fila o no, pero alguien podría aclarar:
- cuándo usar prepare ()
- cuándo usar prepareRow ()
- por qué no agregaría un filtro en la consulta sql inicial para filtrar los resultados de fila que podría eliminar / incluir en cualquiera de los anteriores
¡Gracias!
Respuestas:
Todo esto está cubierto en profundidad en la documentación de las clases de Migraciones proporcionada por el proyecto. Específicamente en la página de métodos de migración implementados comúnmente que dice lo siguiente e incluye implementaciones de funciones de ejemplo simples adicionales. De los documentos ...
función prepare_row ($ fila)
función preparar ($ entidad, stdClass $ fila)
El módulo Migrate es un marco que le permite encapsular un proceso de migración desde un dato de origen a una ubicación y configuración de destino. Una migración consiste en:
La API proporciona enlaces para afectar los datos que se mueven en este ciclo de vida de una migración. Al excluir los datos de la migración a través de su consulta inicial, está limitando la cantidad de control que tiene sobre el total de datos que podría mover. Para las submigraciones, puede resultarle útil. Pero en una migración de contenido general, desearía que su migración fuera lo más completa posible.
fuente
Si puede seleccionar la fila correcta escribiéndola en una consulta, hágalo, sin embargo, preprareRow () se puede usar en sistemas más complejos donde se pueden requerir varios parámetros antes de migrar la fila. En tal caso, es más fácil ejecutar todas las filas y hacer la lógica por filas.
prepare () se ejecuta después de prepareRow () y es su última oportunidad de alterar la entidad antes de que se guarde en la base de datos.
Puede encontrar más información sobre esto aquí: https://www.drupal.org/node/1132582
fuente
Esta es una respuesta parcial y de ninguna manera completa. También me gustaría saber más sobre ambos. Entonces esto puede ser parte de una discusión; aunque he escrito como respuesta en lugar de comentar debido a los siguientes fragmentos de código y ejemplos de cómo he usado las clases anteriores.
Permítanme ilustrar algunos de mis usos prepareRow () como, que hace lo que dice.
Hace poco estaba dando algunos datos para importar desde una base de datos no drupal. La entidad a la que estoy agregando requiere que se ingresen campos que no tengo en mi importación de datos.
Entonces, antes de crear mi clase fuente, puedo agregar
y luego en la función prepareRow puedo hacer lo siguiente
También puede ejecutar php if / else declaraciones aquí si es necesario.
También he usado la función de preparación en mi código y la estoy usando para asignar valores a la entidad.
Solo tuve que usar esto en este escenario ya que hice mi propio complemento de nodo personalizado.
Además, si necesita hacer cálculos al respecto, puede hacerlo en prepareRow, que se ejecuta antes de prepare ()
Por ejemplo, en la importación tenía un valor etiquetado como 'Ciudad', y podría convertirlo en un Id. De término.
Espero que esto ayude.
fuente