AggregatedFieldDataConverter.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\DB;
  7. use Magento\Framework\DB\Adapter\AdapterInterface;
  8. /**
  9. * Date converter for multiple fields in different tables using different field converters
  10. */
  11. class AggregatedFieldDataConverter
  12. {
  13. /**
  14. * @var FieldDataConverterFactory
  15. */
  16. private $fieldDataConverterFactory;
  17. /**
  18. * @var FieldDataConverter[]
  19. */
  20. private $fieldDataConverters = [];
  21. /**
  22. * Constructor
  23. *
  24. * @param FieldDataConverterFactory $fieldDataConverterFactory
  25. */
  26. public function __construct(
  27. FieldDataConverterFactory $fieldDataConverterFactory
  28. ) {
  29. $this->fieldDataConverterFactory = $fieldDataConverterFactory;
  30. }
  31. /**
  32. * Convert data for the specified fields using specified field converters
  33. *
  34. * @param FieldToConvert[] $fieldsToUpdate
  35. * @param AdapterInterface $connection
  36. * @throws FieldDataConversionException
  37. * @return void
  38. */
  39. public function convert(array $fieldsToUpdate, AdapterInterface $connection)
  40. {
  41. foreach ($fieldsToUpdate as $field) {
  42. $fieldDataConverter = $this->getFieldDataConverter($field->getDataConverterClass());
  43. $fieldDataConverter->convert(
  44. $connection,
  45. $field->getTableName(),
  46. $field->getIdentifierField(),
  47. $field->getFieldName(),
  48. $field->getQueryModifier()
  49. );
  50. }
  51. }
  52. /**
  53. * Get field data converter
  54. *
  55. * @param string $dataConverterClassName
  56. * @return FieldDataConverter
  57. */
  58. private function getFieldDataConverter($dataConverterClassName)
  59. {
  60. if (!isset($this->fieldDataConverters[$dataConverterClassName])) {
  61. $this->fieldDataConverters[$dataConverterClassName] = $this->fieldDataConverterFactory->create(
  62. $dataConverterClassName
  63. );
  64. }
  65. return $this->fieldDataConverters[$dataConverterClassName];
  66. }
  67. }