88use Magento \Framework \Mview \View \AdditionalColumnsProcessor \DefaultProcessor ;
99use Magento \Framework \Mview \View \ChangelogBatchWalker ;
1010use Magento \Framework \Mview \View \SubscriptionInterface ;
11+ use Magento \Framework \App \ResourceConnection ;
1112
1213class Converter implements \Magento \Framework \Config \ConverterInterface
1314{
@@ -22,13 +23,21 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
2223 private $ defaultIterator ;
2324
2425 /**
26+ * @var ResourceConnection
27+ */
28+ private $ resourceConnection ;
29+
30+ /**
31+ * @param ResourceConnection $resourceConnection
2532 * @param string $defaultProcessor
2633 * @param string $defaultIterator
2734 */
2835 public function __construct (
36+ ResourceConnection $ resourceConnection ,
2937 string $ defaultProcessor = DefaultProcessor::class,
3038 string $ defaultIterator = ChangelogBatchWalker::class
3139 ) {
40+ $ this ->resourceConnection = $ resourceConnection ;
3241 $ this ->defaultProcessor = $ defaultProcessor ;
3342 $ this ->defaultIterator = $ defaultIterator ;
3443 }
@@ -99,7 +108,15 @@ protected function convertChild(\DOMNode $childNode, $data)
99108 continue ;
100109 }
101110 $ name = $ this ->getAttributeValue ($ subscription , 'name ' );
102- $ column = $ this ->getAttributeValue ($ subscription , 'entity_column ' );
111+ $ configColumn = $ this ->getAttributeValue ($ subscription , 'entity_column ' );
112+ $ column = $ this ->checkifcolumnexist ($ name , $ configColumn );
113+
114+ if (empty ($ column )) {
115+ throw new \InvalidArgumentException (
116+ 'Column ' . $ configColumn . ' does not exist in table ' . $ name
117+ );
118+ }
119+
103120 $ subscriptionModel = $ this ->getAttributeValue ($ subscription , 'subscription_model ' );
104121
105122 if (!empty ($ subscriptionModel )
@@ -155,4 +172,23 @@ private function getAdditionalColumns(\DOMNode $subscription): array
155172
156173 return $ additionalColumns ;
157174 }
175+
176+ /**
177+ * Check if column exists in table, otherwise return primary key column
178+ *
179+ * @param string $tableName
180+ * @param string $columnName
181+ * @return string
182+ */
183+ public function checkifcolumnexist ($ tableName , $ columnName ) : string
184+ {
185+ $ connection = $ this ->resourceConnection ->getConnection ();
186+ $ tableName = $ this ->resourceConnection ->getTableName ($ tableName );
187+
188+ if (!$ connection ->isTableExists ($ tableName ) || $ connection ->tableColumnExists ($ tableName , $ columnName )) {
189+ return $ columnName ;
190+ }
191+
192+ return '' ;
193+ }
158194}
0 commit comments