Используя модуль Migrate: я понимаю, что prepareRow () запускает фильтр для строки и должен возвращать TRUE или FALSE в зависимости от некоторых условий, что позволяет переносить строку или нет, но кто-то может уточнить:
- когда использовать готовить ()
- когда использовать prepareRow ()
- почему вы не добавите фильтр в исходный запрос SQL для фильтрации результатов строки, которые вы можете удалить / включить в любой из вышеперечисленных
Спасибо!
Ответы:
Все это подробно описано в документации по классам миграции, предоставленной проектом. В частности, на странице методов Commononly Implemented Migration, которая говорит следующее и включает дополнительные простые примеры реализации функций. Из документов ...
функция prepare_row ($ row)
функция подготовить ($ entity, stdClass $ row)
Модуль Migrate - это инфраструктура, которая позволяет инкапсулировать процесс миграции из исходного фрагмента данных в место назначения и конфигурацию. Миграция состоит из:
API предоставляет хуки для воздействия на данные, перемещаемые в этом жизненном цикле миграции. Исключая данные из миграции через ваш первоначальный запрос, вы ограничиваете степень контроля над всеми данными, которые вы можете переместить. Для суб-миграций вы можете найти это полезным. Но при общей миграции контента вы бы хотели, чтобы ваша миграция была как можно более всеобъемлющей.
источник
Если вы можете выбрать правильную строку, написав ее в запросе, переходите к ней, однако preprareRow () можно использовать в более сложных системах, где может потребоваться несколько параметров, прежде чем строка будет перенесена. В таком случае легче пройти через все строки и выполнить логику для каждой строки.
prepare () запускается после prepareRow () и является вашим последним шансом изменить сущность перед ее сохранением в базе данных.
Дополнительную информацию об этом можно найти здесь: https://www.drupal.org/node/1132582.
источник
Это частичный ответ и никоим образом не полный. Я также хотел бы узнать больше об обоих из них. Так что это может быть частью дискуссии; хотя я написал как ответ, а не как комментарий из-за следующих фрагментов кода и примеров того, как я использовал вышеупомянутые классы.
Позвольте мне проиллюстрировать некоторые из моих применений prepareRow () как ... что делает как говорится.
Недавно я давал некоторые данные для импорта из не друпальной базы данных. Сущность, к которой я добавляю, требует ввода полей, которых у меня нет при импорте данных.
Поэтому, прежде чем мой исходный класс будет создан, я могу добавить
а затем в функции prepareRow я могу сделать следующее
Вы также можете запускать операторы php if / else здесь, если это необходимо.
Я также использовал функцию подготовки в своем коде и использую ее для присвоения значений сущности.
Я только использовал это в этом сценарии, так как я сделал свой собственный плагин для нодов.
Также, если вам нужно сделать расчеты, вы можете сделать это в prepareRow, который запускается перед prepare ().
Например, в импорте у меня было значение, помеченное как «Город», - и я мог превратить его в идентификатор термина.
Надеюсь, это поможет.
источник