akeneo-pim-system-info_2016-06-16_14-41.txt
Наверное, так же, как в https://github.com/akeneo/pim-community-dev/issues/2644 (который закрыт без объяснения причин)
При добавлении значений в атрибуты продукта с помощью массового редактирования версия обновляется с правильной меткой времени, а метка времени обновления продуктов - нет.
Это можно проверить, массово отредактировав один продукт и запустив php app/console --env=prod pim:product:query '[{"field":"updated","operator":">= WITH TIME","value":"YYYY-MM-DD HH:mm:ss"}]'
Это существенно влияет на некоторые профили экспорта, в которых используется параметр EnhancedConnectors fromLastExecution
.
Примечание. MongoDB уже используется -> Массовое редактирование будет использовать \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll
Итак, это может быть связано с тем, что \Pim\Bundle\CatalogBundle\EventSubscriber\TimestampableSubscriber
слушает только события Doctrines prePersist
и preUpdate
. \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll
вообще не генерирует эти события.
После изучения этого, даты создаются в \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize
при выполнении saveAll
. До сих пор остается загадкой, почему EnhancedConnectors fromLastExecution
не учитывает эти продукты. Есть ли где-то несоответствие часового пояса?
Похоже, что normalizedData.updated
MondoDB не обновляется ...
Привет, Матиас,
Что означает выражение «При добавлении значений к атрибутам товара»? Вы пытались изменить общую ценность продукта? Я попытался воспроизвести его при новой установке, но поле продукта updated_at
было хорошо обновлено.
В вашей системной информации нет EnhancedConnectors
, нормально?
Что означает выражение «При добавлении значений к атрибутам товара»? Вы пытались изменить общую ценность продукта? Я попытался воспроизвести его при новой установке, но поле продукта updated_at было хорошо обновлено.
Да, измените любой атрибут, чтобы продукт был помечен для изменений, чтобы он сохранялся.
В вашей системной информации нет EnhancedConnectors, нормально?
Не имеющий отношения
При массовом редактировании (какие бы методы ни вызывали \Pim\Bundle\CatalogBundle\Doctrine\MongoDBODM\Saver\ProductSaver::saveAll
) следующее будет называться \Pim\Bundle\TransformBundle\Normalizer\MongoDB\ProductNormalizer::normalize
Поскольку мы находимся в ветке 1.4.x, мы видим, что здесь обновлено значение _updated_ для продуктов.
https://github.com/akeneo/pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L87
Но запросы через обработчик mongo нацелены на продукты normalizedData
и не обновляются с новыми отметками времени created
и updated
(https://github.com/akeneo /pim-community-dev/blob/v1.4.25/src/Pim/Bundle/TransformBundle/Normalizer/MongoDB/ProductNormalizer.php#L99).
В качестве обходного пути мы слушаем событие akeneo.storage.pre_save_all
и обновляем там временные метки продуктов.
Относится / дублируется # 5006
@ aRn0D это не вопрос, это ошибка; согласно # 5006 работает в режиме ORM, но не в ODM
Вверх.
Я воспроизвел эту ошибку в нашем экземпляре PIM.
Нормализатор обновляет "корневое" поле, обновленное "на лету", но не обновляет его до объекта продукта. Итак, как сказал @mathewrapid :
Поле Product updated и normalizedData.updated всегда не синхронизированы. NormalizedData опаздывает на один шаг.
Я думаю, что нормализатор никогда не должен делать $data['updated'] = $this->mongoFactory->createMongoDate();
если данные установлены в модели продукта. Это нормализатор, а не средство обновления.
Дело в том, что товар нужно обновить (значит обновить поле) перед нормализацией.
+1
Привет, @mathewrapid , @jlestel , @bmarrot !
К вашему сведению, эта проблема (PIM-6038) была исправлена в следующих версиях:
С наилучшими пожеланиями,
Имо. можно закрыть. Мнения?
Как отметил @nidup в https://github.com/akeneo/pim-community-dev/issues/4620#issuecomment -279428030, это было исправлено в PIM-6038.
Самый полезный комментарий
Имо. можно закрыть. Мнения?