Magento version: 2.1.4 community edition
PHP version 7.0.15
Try to assign some products to categories programmatically using a CategoryLinkManagement object. The code looks something like this:
$this
->categoryLinkManagement
->assignProductToCategories(
$someValidProduct->getSku(),
[$someValidCategory->getId()]
);
where the categoryLinkManagement property is injected via DI into the current class.
The product gets assigned to the category.
I get an error telling me that "Could not save product "2048" with position 0 to category 42"
After digging around in the code, it seems that the issue stems from this piece of code in the Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator class, the isCategoryProperForGenerating method:
if ($category->getParentId() != \Magento\Catalog\Model\Category::TREE_ROOT_ID) {
list(, $rootCategoryId) = $category->getParentIds();
return $rootCategoryId == $this->storeManager->getStore($storeId)->getRootCategoryId();
}
more specific,
list(, $rootCategoryId) = $category->getParentIds();
From what I can tell, the code simply tries to get the first element from the array of category parent ids and assign it to $rootCategoryId, but it does that by relying on php 5 or less behavior. Here is what the php manual says about list:
Warning
In PHP 5, list() assigns the values starting with the right-most parameter. In PHP 7, list() starts with the left-most parameter.
They are even warning that list is unpredictable:
Generally speaking, it is advisable to avoid relying on a specific order of operation, as this may change again in the future.
So this code fails to get the root category in php 7 and it even generates a notice if the parent ids array has less than 2 elements, since there is no element with an index of 1.
Exception: Notice: Undefined offset: 1 in vendor/magento/module-catalog-url-rewrite/Model/ProductUrlRewriteGenerator.php on line 195
(here is a related issue detailing this: https://github.com/magento/magento2/issues/7916)
Would be great to hear what the core team has to say about this, because it's kind of an edgy case..
The issue has been fixed and deliverd to 2.2-develop branch. Will be available with 2.2.2 release
Internal ticket to track issue progress: MAGETWO-82972
Hi @marius-bica. Thank you for your report.
The issue has been fixed in magento-engcom/magento2ce#1285 by @magento-engcom-team in 2.3-develop branch
Related commit(s):
The fix will be available with the upcoming patch release.
I am getting this after updating to 2.2.4
Perhaps a similar error in 2.2.3
Specifically trying to removing prodcut from a parent category but leaving it in sub category:
Current state:
Parent Cat
-Sub Cat
product here
Desired state remove Parent Cat:
-Sub Cat
product here
Result: Could not save product "205" with position 0 to category 3
I can move the product freely in subcategories. I just cant remove it from from the root.
I am getting this on Magento 2.2.3
I was first clueless but I narrowed down it a bit. here is the scenario.
Cat 174 has multiple products, then it was disabled. Now from the product edit page, i tried to remove the product from this category Klm. I receive error
Could not save product "3572" with position 0 to category 174
I repeat the steps and next time it says You saved the product. and works as expected.
Best,
Same issue on version 2.2.5
magento 2.2.4
Could not save product with position to category
Unique constraint violation found
it accrues after trying to remove categories from a product
Still happens to me with magento 2.2.5
same issue here @ 2.2.4
same issue here @ 2.2.6
Issue still persisting 2.2.4
How can close this issue, even this issue already existing in magento 2.2.6.
Hello @graffxdesign @inkobject @harshvardhanmalpani @koopjesboom @salehawal @tukker01 @AlexanderHuyghebaert @digvijay2017
First of all, thank you all for the feedback, comments and collaboration!
We have investigated this issue and defined:
The issue and the fix details
2.2.22.2.1: Link to Code2.2.2: Link to CodeCurrent Situation
2.2.12.2.2 - cannot be reproduced by testing scenarios2.3.0 - cannot be reproduced by testing scenarios, fixed2.2-develop - cannot be reproduced by testing scenarios, fixed2.3-develop - cannot be reproduced by testing scenarios, fixedAnd as result:
Solution
Based on all of mentioned above:
The best solution it's to create a new issue. With detailed information about how it can be reproduced on the clear/vanilla Magento versions(2.2-develop and 2.3-develop)
To deploy vanilla Magento instance on our environment, please, add a comment to the issue:
@magento-engcom-team give me $VERSION instancewhere
$VERSIONis version tags (starting from 2.2.0+) or develop branches (for example: 2.3-develop).
For more details, please, review the Magento Contributor Assistant documentation.
Unfortunately, I am not able to reproduce error that was mentioned in the comments and because of that cannot create a new issue by myself.
And that is why we need you for help with it.
I suppose a proposed solution could make you sad.
But it is the most efficient way to resolve it as quickly as possible rather than add comments to closed, more than a year ago, issue.
The changes are already in 2.2.4 but i receive same error when unassigned any product from root category. How i will solve this?
@sdzhepa to continue the "respond to comments one year later" trend, thank you for your input. If it is of any use, I have since moved to different hosts and have made many changes to the environment. I have not seen the issue crop up since. I agree with your observation regarding my experience.
Most helpful comment
same issue here @ 2.2.6