Usando o módulo Migrate: Entendo que prepareRow () executa um filtro na linha e deve retornar TRUE ou FALSE com base em algumas condições, o que permite que uma linha seja migrada ou não, mas alguém poderia esclarecer:
- quando usar prepare ()
- quando usar prepareRow ()
- por que você não adicionou um filtro na consulta sql inicial para filtrar os resultados da linha que você pode remover / incluir em qualquer uma das opções acima
Obrigado!
Respostas:
Tudo isso é abordado em profundidade na documentação das classes de Migrações fornecida pelo projeto. Especificamente na página de métodos de Migração comum implementada , que diz o seguinte e inclui outras implementações simples de funções de exemplo. Dos documentos ...
função prepare_row ($ row)
função prepare ($ entity, stdClass $ row)
O módulo Migrar é uma estrutura que permite encapsular um processo de migração de uma parte dos dados de origem para um local e configuração de destino. Uma migração consiste em:
A API fornece ganchos para afetar os dados que estão sendo movidos neste ciclo de vida de uma migração. Ao excluir dados da migração por meio de sua consulta inicial, você limita o controle que você tem sobre o total de dados que pode mover. Para sub-migrações, você pode achar isso útil. Mas em uma migração geral de conteúdo, você deseja que sua migração seja o mais abrangente possível.
fonte
Se você pode selecionar a linha correta, escrevendo-a em uma consulta, vá em frente, no entanto preprareRow () pode ser usado em sistemas mais complexos, onde vários parâmetros podem ser necessários antes da linha ser migrada. Nesse caso, é mais fácil percorrer todas as linhas e executar a lógica por linha.
prepare () é executado após prepareRow () e é sua última chance de alterar a entidade antes de ser salva no banco de dados.
Mais informações sobre isso podem ser encontradas aqui: https://www.drupal.org/node/1132582
fonte
Esta é uma resposta parcial e de forma alguma completa. Eu também gostaria de descobrir mais sobre os dois. Portanto, isso pode ser parte de uma discussão; embora eu tenha escrito como resposta em vez de comentar por causa dos seguintes trechos de código e exemplos de como usei as classes acima.
Deixe-me ilustrar alguns dos meus usos prepareRow () como - que faz o que diz.
Recentemente, eu estava fornecendo alguns dados para importar de um banco de dados não drupal. A entidade à qual estou adicionando exige a inserção de campos que não tenho na minha importação de dados.
Então, antes que minha classe de origem seja criada, posso adicionar
e então na função prepareRow eu posso fazer o seguinte
você também pode executar as instruções if / else do php aqui, se necessário.
Eu também usei a função de preparação no meu código e estou usando-a para atribuir valores à entidade.
Eu só precisei usar isso nesse cenário, pois fiz meu próprio plug-in de nó personalizado.
Além disso, se você precisar fazer cálculos sobre isso, poderá fazê-lo em prepareRow, que é executado antes de prepare ()
Por exemplo, na importação, eu tinha um valor chamado 'Cidade' - e poderia transformá-lo em um ID do termo.
Eu espero que isso ajude.
fonte