Open bonllavier opened 2 months ago
@bonllavier here's a patch of a possible solution:
diff --git a/Model/Category/CategoryUtility/CategoryUtilities.php b/Model/Category/CategoryUtility/CategoryUtilities.php
index 9fd8c9147..741f18418 100644
--- a/Model/Category/CategoryUtility/CategoryUtilities.php
+++ b/Model/Category/CategoryUtility/CategoryUtilities.php
@@ -27,6 +27,7 @@ use Magento\Catalog\Model\ResourceModel\Category\Collection;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory as CategoryCollectionFactory;
use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
+use Magento\Framework\EntityManager\MetadataPool;
use Magento\Framework\Exception\LocalizedException;
use Magento\Eav\Model\Config as EavConfig;
use Magento\Framework\App\ResourceConnection;
@@ -93,6 +94,11 @@ class CategoryUtilities
*/
private ResourceConnection $resourceConnection;
+ /**
+ * @var MetadataPool
+ */
+ private MetadataPool $metadataPool;
+
/**
* Constructor
* @param ProductCollectionFactory $productCollectionFactory
@@ -104,6 +110,7 @@ class CategoryUtilities
* @param CategoryImageService $imageService
* @param EavConfig $eavConfig
* @param ResourceConnection $resourceConnection
+ * @param MetadataPool $metadataPool
*/
public function __construct(
ProductCollectionFactory $productCollectionFactory,
@@ -114,7 +121,8 @@ class CategoryUtilities
ProductIdentifier $productIdentifier,
CategoryImageService $imageService,
EavConfig $eavConfig,
- ResourceConnection $resourceConnection
+ ResourceConnection $resourceConnection,
+ MetadataPool $metadataPool
) {
$this->categoryCollection = $categoryCollection;
$this->categoryRepository = $categoryRepository;
@@ -125,6 +133,7 @@ class CategoryUtilities
$this->imageService = $imageService;
$this->eavConfig = $eavConfig;
$this->resourceConnection = $resourceConnection;
+ $this->metadataPool = $metadataPool;
}
/**
* Fetch products for product category
@@ -377,6 +386,7 @@ class CategoryUtilities
SystemConfig::META_PRODUCT_SET_ID
);
$productSetAttributeId = $productSetAttribute->getAttributeId();
+ $categoryEntityLinkField = $this->metadataPool->getMetadata(\Magento\Catalog\Api\Data\CategoryInterface::class)->getLinkField();
if ($productSetAttributeId) {
$categoryEntityVarcharTable = $this->resourceConnection->getTableName(
@@ -388,7 +398,7 @@ class CategoryUtilities
[
'attribute_id' => $productSetAttributeId,
'store_id' => $storeId,
- 'entity_id' => $category->getId(),
+ $categoryEntityLinkField => $category->getId(),
'value' => $setId
]
);
@@ -398,13 +408,13 @@ class CategoryUtilities
[
'attribute_id' => $productSetAttributeId,
'store_id' => $storeId,
- 'entity_id' => $category->getId(),
+ $categoryEntityLinkField => $category->getId(),
'value' => $setId
],
[
'attribute_id = ?' => $productSetAttributeId,
'store_id = ?' => $storeId,
- 'entity_id = ?' => $category->getId(),
+ \sprintf('%s = ?', $categoryEntityLinkField) => $category->getId(),
]
);
}
:bangbang: Please test the patch before attempting to install it on production environment. There is used a best practice for handling Adobe Commerce Staging Content extension which makes this extension not compatible, you should be able to find in other extensions in Magento/Adobe Commerce or other 3rd party extensions.
I highly recommend looking for other usage of \Magento\Framework\EntityManager\EntityMetadataInterface::getLinkField
function and its implementation to get a better understanding what the use case is.
[UPDATE] I've tested the patch myself, so for me the solution is working.
Preconditions (*)
1.Adobe commerce cloud 2.4.6 p6, php 8.1.28 2.Meta Extension Version: 1.3.3
Steps to reproduce (*)
Expected result (*)
Actual result (*)
log file: "/var/log/meta/meta-business-extension.log" is showing the following error:
[2024-09-17T05:00:31.722383+00:00] FBE.INFO: saving product set id for category Accesorios ,id 493 ,storeId 43 and setId 8349883411721373 [] [] [2024-09-17T05:00:31.722923+00:00] FBE.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'entity_id' in 'field list', query was: INSERT INTO
catalog_category_entity_varchar(
attribute_id,
store_id,
entity_id,
value`) VALUES (?, ?, ?, ?) [] [] [2024-09-17T05:00:31.722980+00:00] FBE.ERROR: #0 /app/vendor/magento/framework/DB/Statement/Pdo/Mysql.php(91): Magento\Framework\DB\Statement\Pdo\Mysql->tryExecute(Object(Closure))1 /app/vendor/magento/zend-db/library/Zend/Db/Statement.php(313): Magento\Framework\DB\Statement\Pdo\Mysql->_execute(Array)
2 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
3 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Pdo/Abstract.php(242): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
4 /app/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(564): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
5 /app/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(634): Magento\Framework\DB\Adapter\Pdo\Mysql->_query('INSERT INTO `ca...', Array)
6 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Abstract.php(576): Magento\Framework\DB\Adapter\Pdo\Mysql->query('INSERT INTO `ca...', Array)
7 /app/vendor/meta/module-catalog/Model/Category/CategoryUtility/CategoryUtilities.php(392): Zend_Db_Adapter_Abstract->insert('catalog_categor...', Array)
8 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(589): Meta\Catalog\Model\Category\CategoryUtility\CategoryUtilities->saveFBProductSetID(Object(Magento\Catalog\Model\Category\Interceptor), '834988341172137...', 43)
9 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(515): Meta\Catalog\Model\Category\CategoryCollection->processCategoryBatchResponse(Array, Array, 43, 1, 'daily_categorie...', 'magento_66e90ce...')
10 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(372): Meta\Catalog\Model\Category\CategoryCollection->flushCategoryBatchRequest(Array, Array, 1, 'EAACxonUmtyIBO9...', 43, 'daily_categorie...', 'magento_66e90ce...')
11 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(222): Meta\Catalog\Model\Category\CategoryCollection->pushCategoriesToFBCollections(Object(Magento\Catalog\Model\ResourceModel\Category\Collection\Interceptor), 'EAACxonUmtyIBO9...', 43, 'daily_categorie...', 'magento_66e90ce...')
12 /app/vendor/meta/module-catalog/Cron/CategorySyncCron.php(75): Meta\Catalog\Model\Category\CategoryCollection->pushAllCategoriesToFbCollections(43, 'daily_categorie...', 'magento_66e90ce...')
13 [internal function]: Meta\Catalog\Cron\CategorySyncCron->execute(Object(Magento\Cron\Model\Schedule))
14 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(362): call_user_func_array(Array, Array)
15 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(873): Magento\Cron\Observer\ProcessCronQueueObserver->_runJob(1726549200, 1726549226, Array, Object(Magento\Cron\Model\Schedule), 'facebook_automa...')
16 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(834): Magento\Cron\Observer\ProcessCronQueueObserver->tryRunJob(1726549200, 1726549226, Array, Object(Magento\Cron\Model\Schedule), 'facebook_automa...')
17 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(280): Magento\Cron\Observer\ProcessCronQueueObserver->processPendingJobs('facebook_automa...', Array, 1726549226)
18 /app/vendor/magento/framework/Event/Invoker/InvokerDefault.php(88): Magento\Cron\Observer\ProcessCronQueueObserver->execute(Object(Magento\Framework\Event\Observer))
19 /app/vendor/magento/framework/Event/Invoker/InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\Cron\Observer\ProcessCronQueueObserver), Object(Magento\Framework\Event\Observer))
20 /app/vendor/magento/module-staging/Model/Event/Manager.php(97): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
21 /app/generated/code/Magento/Staging/Model/Event/Manager/Proxy.php(95): Magento\Staging\Model\Event\Manager->dispatch('default', Array)
22 /app/vendor/magento/framework/App/Cron.php(86): Magento\Staging\Model\Event\Manager\Proxy->dispatch('default')
23 /app/vendor/magento/module-cron/Console/Command/CronCommand.php(126): Magento\Framework\App\Cron->launch()
24 /app/vendor/symfony/console/Command/Command.php(298): Magento\Cron\Console\Command\CronCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
25 /app/vendor/magento/framework/Interception/Interceptor.php(58): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
26 /app/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Cron\Console\Command\CronCommand\Interceptor->___callParent('run', Array)
27 /app/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Cron\Console\Command\CronCommand\Interceptor->Magento\Framework\Interception{closure}(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
28 /app/generated/code/Magento/Cron/Console/Command/CronCommand/Interceptor.php(23): Magento\Cron\Console\Command\CronCommand\Interceptor->___callPlugins('run', Array, Array)
29 /app/vendor/symfony/console/Application.php(1040): Magento\Cron\Console\Command\CronCommand\Interceptor->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
30 /app/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(Magento\Cron\Console\Command\CronCommand\Interceptor), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
31 /app/vendor/magento/framework/Console/Cli.php(116): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
32 /app/vendor/symfony/console/Application.php(171): Magento\Framework\Console\Cli->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
33 /app/bin/magento(23): Symfony\Component\Console\Application->run()
34 {main} [] []
[2024-09-17T05:00:31.723101+00:00] FBE.INFO: saving product set id for category Cuotas 18-24 ,id 505 ,storeId 43 and setId 8425590937529936 [] [] [2024-09-17T05:00:31.723732+00:00] FBE.ERROR: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'entity_id' in 'field list', query was: INSERT INTO
catalog_category_entity_varchar
(attribute_id
,store_id
,entity_id
,value
) VALUES (?, ?, ?, ?) [] [] [2024-09-17T05:00:31.723811+00:00] FBE.ERROR: #0 /app/vendor/magento/framework/DB/Statement/Pdo/Mysql.php(91): Magento\Framework\DB\Statement\Pdo\Mysql->tryExecute(Object(Closure))1 /app/vendor/magento/zend-db/library/Zend/Db/Statement.php(313): Magento\Framework\DB\Statement\Pdo\Mysql->_execute(Array)
2 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Abstract.php(480): Zend_Db_Statement->execute(Array)
3 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Pdo/Abstract.php(242): Zend_Db_Adapter_Abstract->query('INSERT INTO `ca...', Array)
4 /app/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(564): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `ca...', Array)
5 /app/vendor/magento/framework/DB/Adapter/Pdo/Mysql.php(634): Magento\Framework\DB\Adapter\Pdo\Mysql->_query('INSERT INTO `ca...', Array)
6 /app/vendor/magento/zend-db/library/Zend/Db/Adapter/Abstract.php(576): Magento\Framework\DB\Adapter\Pdo\Mysql->query('INSERT INTO `ca...', Array)
7 /app/vendor/meta/module-catalog/Model/Category/CategoryUtility/CategoryUtilities.php(392): Zend_Db_Adapter_Abstract->insert('catalog_categor...', Array)
8 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(589): Meta\Catalog\Model\Category\CategoryUtility\CategoryUtilities->saveFBProductSetID(Object(Magento\Catalog\Model\Category\Interceptor), '842559093752993...', 43)
9 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(515): Meta\Catalog\Model\Category\CategoryCollection->processCategoryBatchResponse(Array, Array, 43, 1, 'daily_categorie...', 'magento_66e90ce...')
10 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(372): Meta\Catalog\Model\Category\CategoryCollection->flushCategoryBatchRequest(Array, Array, 1, 'EAACxonUmtyIBO9...', 43, 'daily_categorie...', 'magento_66e90ce...')
11 /app/vendor/meta/module-catalog/Model/Category/CategoryCollection.php(222): Meta\Catalog\Model\Category\CategoryCollection->pushCategoriesToFBCollections(Object(Magento\Catalog\Model\ResourceModel\Category\Collection\Interceptor), 'EAACxonUmtyIBO9...', 43, 'daily_categorie...', 'magento_66e90ce...')
12 /app/vendor/meta/module-catalog/Cron/CategorySyncCron.php(75): Meta\Catalog\Model\Category\CategoryCollection->pushAllCategoriesToFbCollections(43, 'daily_categorie...', 'magento_66e90ce...')
13 [internal function]: Meta\Catalog\Cron\CategorySyncCron->execute(Object(Magento\Cron\Model\Schedule))
14 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(362): call_user_func_array(Array, Array)
15 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(873): Magento\Cron\Observer\ProcessCronQueueObserver->_runJob(1726549200, 1726549226, Array, Object(Magento\Cron\Model\Schedule), 'facebook_automa...')
16 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(834): Magento\Cron\Observer\ProcessCronQueueObserver->tryRunJob(1726549200, 1726549226, Array, Object(Magento\Cron\Model\Schedule), 'facebook_automa...')
17 /app/vendor/magento/module-cron/Observer/ProcessCronQueueObserver.php(280): Magento\Cron\Observer\ProcessCronQueueObserver->processPendingJobs('facebook_automa...', Array, 1726549226)
18 /app/vendor/magento/framework/Event/Invoker/InvokerDefault.php(88): Magento\Cron\Observer\ProcessCronQueueObserver->execute(Object(Magento\Framework\Event\Observer))
19 /app/vendor/magento/framework/Event/Invoker/InvokerDefault.php(74): Magento\Framework\Event\Invoker\InvokerDefault->_callObserverMethod(Object(Magento\Cron\Observer\ProcessCronQueueObserver), Object(Magento\Framework\Event\Observer))
20 /app/vendor/magento/module-staging/Model/Event/Manager.php(97): Magento\Framework\Event\Invoker\InvokerDefault->dispatch(Array, Object(Magento\Framework\Event\Observer))
21 /app/generated/code/Magento/Staging/Model/Event/Manager/Proxy.php(95): Magento\Staging\Model\Event\Manager->dispatch('default', Array)
22 /app/vendor/magento/framework/App/Cron.php(86): Magento\Staging\Model\Event\Manager\Proxy->dispatch('default')
23 /app/vendor/magento/module-cron/Console/Command/CronCommand.php(126): Magento\Framework\App\Cron->launch()
24 /app/vendor/symfony/console/Command/Command.php(298): Magento\Cron\Console\Command\CronCommand->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
25 /app/vendor/magento/framework/Interception/Interceptor.php(58): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
26 /app/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Cron\Console\Command\CronCommand\Interceptor->___callParent('run', Array)
27 /app/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Cron\Console\Command\CronCommand\Interceptor->Magento\Framework\Interception{closure}(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
28 /app/generated/code/Magento/Cron/Console/Command/CronCommand/Interceptor.php(23): Magento\Cron\Console\Command\CronCommand\Interceptor->___callPlugins('run', Array, Array)
29 /app/vendor/symfony/console/Application.php(1040): Magento\Cron\Console\Command\CronCommand\Interceptor->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
30 /app/vendor/symfony/console/Application.php(301): Symfony\Component\Console\Application->doRunCommand(Object(Magento\Cron\Console\Command\CronCommand\Interceptor), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
31 /app/vendor/magento/framework/Console/Cli.php(116): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
32 /app/vendor/symfony/console/Application.php(171): Magento\Framework\Console\Cli->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
33 /app/bin/magento(23): Symfony\Component\Console\Application->run()
34 {main} [] []`
I have managed to understand a little of the instructions that are declared where the error is being marked, and the code seems to be incompatible with the table structure for Adobe Commerce Cloud or the Enterprise version, since this version has a column with a different name that replaces "entity_id" with "row_id" due to the Content Staging of the Enterprise version. Can I request to review this problem? It is still not clear to me how much of an impact there is by not being able to execute these instructions on Magento.