Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot assign products to categories not under tree root #8970

Closed
marius-bica opened this issue Mar 22, 2017 · 20 comments
Closed

Cannot assign products to categories not under tree root #8970

marius-bica opened this issue Mar 22, 2017 · 20 comments
Assignees
Labels
bug report Component: Catalog Fixed in 2.3.x The issue has been fixed in 2.3 release line Issue: Clear Description Gate 2 Passed. Manual verification of the issue description passed Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed Issue: Ready for Work Gate 4. Acknowledged. Issue is added to backlog and ready for development Reproduced on 2.1.x The issue has been reproduced on latest 2.1 release Reproduced on 2.2.x The issue has been reproduced on latest 2.2 release Reproduced on 2.3.x The issue has been reproduced on latest 2.3 release

Comments

@marius-bica
Copy link

marius-bica commented Mar 22, 2017

Preconditions

Magento version: 2.1.4 community edition
PHP version 7.0.15

Steps to reproduce

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.

Expected result

The product gets assigned to the category.

Actual result

I get an error telling me that "Could not save product "2048" with position 0 to category 42"

What I think

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: #7916)

@tdgroot
Copy link
Member

tdgroot commented Jun 7, 2017

Would be great to hear what the core team has to say about this, because it's kind of an edgy case..

@magento-engcom-team magento-engcom-team added 2.1.x bug report Component: Catalog Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed and removed G1 Passed labels Sep 5, 2017
@magento-engcom-team magento-engcom-team added the Issue: Clear Description Gate 2 Passed. Manual verification of the issue description passed label Sep 29, 2017
@magento-engcom-team magento-engcom-team added 2.2.x Issue: Ready for Work Gate 4. Acknowledged. Issue is added to backlog and ready for development Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed Reproduced on 2.1.x The issue has been reproduced on latest 2.1 release Reproduced on 2.2.x The issue has been reproduced on latest 2.2 release Reproduced on 2.3.x The issue has been reproduced on latest 2.3 release labels Oct 11, 2017
@p-bystritsky p-bystritsky self-assigned this Oct 26, 2017
@okorshenko
Copy link
Contributor

The issue has been fixed and deliverd to 2.2-develop branch. Will be available with 2.2.2 release

@magento-team
Copy link
Contributor

Internal ticket to track issue progress: MAGETWO-82972

@magento-engcom-team magento-engcom-team added the Fixed in 2.3.x The issue has been fixed in 2.3 release line label Jan 30, 2018
@magento-engcom-team
Copy link
Contributor

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.

@graffxdesign
Copy link

I am getting this after updating to 2.2.4

@inkobject
Copy link

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.

@harshvardhanmalpani
Copy link

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.

  • Root Catalog (id=1)
    -- Main Cat (id=2)
    --- Abc
    ---- Hij
    ---- Klm (id=27, status=disabled)
    ---- Xyz

@ghost
Copy link

ghost commented Jul 25, 2018

Best,

Same issue on version 2.2.5

@salehawal
Copy link

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

@sabl0r
Copy link

sabl0r commented Sep 11, 2018

Still happens to me with magento 2.2.5

@salehawal
Copy link

same issue here @ 2.2.4

@tukker01
Copy link

same issue here @ 2.2.6

@AlexanderHuyghebaert
Copy link

Issue still persisting 2.2.4

@digvijay2017
Copy link

How can close this issue, even this issue already existing in magento 2.2.6.

@sdzhepa
Copy link
Contributor

sdzhepa commented Jan 23, 2019

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

  1. The initially described issue was fixed with PR GITHUB-8970: Cannot assign products to categories not under tree root. #11817. Changes were applied on "public function isCategoryProperForGenerating", see details by This Link
  2. The issue was fixed based on proposed solution by reporter in the description
  3. The issue was tested and confirmed based on the description for GITHUB-8970: Cannot assign products to categories not under tree root. #11817
  4. All code changes were delivered with 2.2.2
    -- It was not in 2.2.1: Link to Code
    -- The fix appears starting from 2.2.2: Link to Code
  5. Additional details about commits can be found here Cannot assign products to categories not under tree root #8970 (comment)

Current Situation

  1. I have verified issue by Manual testing scenarios provided in the description for GITHUB-8970: Cannot assign products to categories not under tree root. #11817. And can confirm:
    -- the issue was reproducible in 2.2.1
    -- has been fixed in 2.2.2 - cannot be reproduced by testing scenarios
    -- 2.3.0 - cannot be reproduced by testing scenarios, fixed
    -- 2.2-develop - cannot be reproduced by testing scenarios, fixed
    -- 2.3-develop - cannot be reproduced by testing scenarios, fixed
  2. Also, I tried to replicate error using steps from comments:
    -- Cannot assign products to categories not under tree root #8970 (comment) by @inkobject
    -- Cannot assign products to categories not under tree root #8970 (comment) by @harshvardhanmalpani

And as result:

  • I cannot reproduce it by provided steps. But based on comments amount, I think some important preconditions or step(s) were missed. Like install type, PHP version, Magento mode, order of provided steps or other very important conditions/steps(mass actions, import/export, SysConf settings, Category settings, etc)
  • I cannot confirm that both issues have the same root cause. It could be similar symptoms related to a different part(s) of code.

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 instance

where $VERSION is 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.

@Mrinza
Copy link

Mrinza commented Aug 19, 2019

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?

@inkobject
Copy link

@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.

@rtshshukla
Copy link

Hi
I'm using the 2.3.5-p2 commerce cloud version, I'm facing the same issue. is there any patch or solution for this?
Thanks in adavnce

@JMLucas96
Copy link

Same issue on Magento2.3.6 CE...

@ClintTec
Copy link

still happening on Magento 2.4.1p

magento-devops-reposync-svc pushed a commit that referenced this issue Jun 27, 2024
…ment

[Bengals Team] Test Fixes and Automation Tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug report Component: Catalog Fixed in 2.3.x The issue has been fixed in 2.3 release line Issue: Clear Description Gate 2 Passed. Manual verification of the issue description passed Issue: Confirmed Gate 3 Passed. Manual verification of the issue completed. Issue is confirmed Issue: Format is valid Gate 1 Passed. Automatic verification of issue format passed Issue: Ready for Work Gate 4. Acknowledged. Issue is added to backlog and ready for development Reproduced on 2.1.x The issue has been reproduced on latest 2.1 release Reproduced on 2.2.x The issue has been reproduced on latest 2.2 release Reproduced on 2.3.x The issue has been reproduced on latest 2.3 release
Projects
None yet
Development

No branches or pull requests