7
7
8
8
use Magento \Framework \DB \FieldDataConverterFactory ;
9
9
use Magento \Framework \DB \DataConverter \SerializedToJson ;
10
+ use Magento \Framework \DB \FieldDataConverter ;
10
11
11
12
/**
12
13
* Convert serialized data in sales tables to JSON
@@ -23,29 +24,38 @@ class ConvertSerializedDataToJson
23
24
*/
24
25
private $ fieldDataConverterFactory ;
25
26
27
+ /**
28
+ * @var array
29
+ */
30
+ private $ fieldDataConverters = [];
31
+
26
32
/**
27
33
* @var array
28
34
*/
29
35
private $ fieldsToUpdate = [
30
36
[
31
37
'table ' => 'sales_order_item ' ,
32
38
'identifier ' => 'item_id ' ,
33
- 'title ' => 'product_options '
39
+ 'title ' => 'product_options ' ,
40
+ 'data_converter ' => SerializedDataConverter::class
34
41
],
35
42
[
36
43
'table ' => 'sales_shipment ' ,
37
44
'identifier ' => 'entity_id ' ,
38
- 'title ' => 'packages '
45
+ 'title ' => 'packages ' ,
46
+ 'data_converter ' => SerializedToJson::class
39
47
],
40
48
[
41
49
'table ' => 'sales_order_payment ' ,
42
50
'identifier ' => 'entity_id ' ,
43
- 'title ' => 'additional_information '
51
+ 'title ' => 'additional_information ' ,
52
+ 'data_converter ' => SerializedToJson::class
44
53
],
45
54
[
46
55
'table ' => 'sales_payment_transaction ' ,
47
56
'identifier ' => 'transaction_id ' ,
48
- 'title ' => 'additional_information '
57
+ 'title ' => 'additional_information ' ,
58
+ 'data_converter ' => SerializedToJson::class
49
59
]
50
60
];
51
61
@@ -74,8 +84,8 @@ public function __construct(
74
84
*/
75
85
public function convert ()
76
86
{
77
- $ fieldDataConverter = $ this ->fieldDataConverterFactory ->create (SerializedToJson::class);
78
87
foreach ($ this ->fieldsToUpdate as $ field ) {
88
+ $ fieldDataConverter = $ this ->getFieldDataConverter ($ field ['data_converter ' ]);
79
89
$ fieldDataConverter ->convert (
80
90
$ this ->salesSetup ->getConnection (),
81
91
$ this ->salesSetup ->getTable ($ field ['table ' ]),
@@ -84,4 +94,20 @@ public function convert()
84
94
);
85
95
}
86
96
}
97
+
98
+ /**
99
+ * Get field data converter
100
+ *
101
+ * @param string $dataConverterClassName
102
+ * @return FieldDataConverter
103
+ */
104
+ private function getFieldDataConverter ($ dataConverterClassName )
105
+ {
106
+ if (!isset ($ this ->fieldDataConverters [$ dataConverterClassName ])) {
107
+ $ this ->fieldDataConverters [$ dataConverterClassName ] = $ this ->fieldDataConverterFactory ->create (
108
+ $ dataConverterClassName
109
+ );
110
+ }
111
+ return $ this ->fieldDataConverters [$ dataConverterClassName ];
112
+ }
87
113
}
0 commit comments