Utilisation du module Migrate: je comprends que prepareRow () exécute un filtre sur la ligne et devrait retourner VRAI ou FAUX en fonction de certaines conditions, ce qui permet de migrer une ligne ou non, mais quelqu'un pourrait-il clarifier:
- quand utiliser prepare ()
- quand utiliser prepareRow ()
- pourquoi vous n'ajouteriez pas de filtre dans la requête sql initiale pour filtrer les résultats de ligne que vous pourriez supprimer / inclure dans l'une des options ci-dessus
Merci!
Réponses:
Tout cela est traité en détail dans la documentation des classes de migrations fournie par le projet. Plus précisément dans la page des méthodes de migration mises en œuvre en commun qui indique ce qui suit et inclut d'autres exemples d'implémentations de fonctions simples. De la documentation ...
fonction prepare_row ($ row)
fonction prepare ($ entity, stdClass $ row)
Le module Migrate est une infrastructure qui vous permet d'encapsuler un processus de migration d'une donnée source vers un emplacement et une configuration de destination. Une migration consiste en:
L'API fournit des crochets pour affecter les données déplacées dans ce cycle de vie d'une migration. En excluant les données de la migration via votre requête initiale, vous limitez le contrôle que vous avez sur le total des données que vous pouvez déplacer. Pour les sous-migrations, cela peut vous être utile. Mais dans une migration de contenu générale, vous voudriez que votre migration soit aussi globale que possible.
la source
Si vous pouvez sélectionner la bonne ligne en l'écrivant dans une requête, allez-y, cependant preprareRow () peut être utilisé dans des systèmes plus complexes où plusieurs paramètres peuvent être requis avant la migration de la ligne. Dans un tel cas, il est plus facile de parcourir toutes les lignes et de faire la logique ligne par ligne.
prepare () est exécuté après prepareRow () et est votre dernière chance de modifier l'entité avant qu'elle ne soit enregistrée dans la base de données.
Vous trouverez plus d'informations à ce sujet ici: https://www.drupal.org/node/1132582
la source
Ceci est une réponse partielle et nullement complète. Je voudrais également en savoir plus sur ces deux éléments. Cela peut donc faire partie d'une discussion; bien que j'aie écrit comme réponse plutôt que comme commentaire à cause des extraits de code suivants et des exemples de la façon dont j'ai utilisé les classes ci-dessus.
Permettez-moi d'illustrer certaines de mes utilisations prepareRow () as - qui fait ce qu'il dit.
Récemment, je donnais des données à importer à partir d'une base de données non drupale. L'entité à laquelle j'ajoute nécessite la saisie de champs que je n'ai pas dans mon importation de données.
Donc, avant que ma classe source soit créée, je peux ajouter
puis dans la fonction prepareRow, je peux faire ce qui suit
vous pouvez également exécuter les instructions php if / else ici si nécessaire.
J'ai également utilisé la fonction prepare dans mon code et je l'utilise pour attribuer des valeurs à l'entité.
Je n'ai eu qu'à l'utiliser dans ce scénario car j'ai créé mon propre plugin de nœud personnalisé.
De plus, si vous avez besoin de faire des calculs à ce sujet, vous pouvez le faire dans prepareRow qui s'exécute avant prepare ()
Par exemple, lors de l'importation, j'avais une valeur intitulée «Ville» - et je pouvais en faire un identifiant de terme.
J'espère que ça aide.
la source