Calling Developers!
We are reenergizing our code contribution process! Learn More

What are the Slack Archives?

It’s a history of our time together in the Slack Community! There’s a ton of knowledge in here, so feel free to search through the archives for a possible answer to your question.

Because this space is not active, you won’t be able to create a new post or comment here. If you have a question or want to start a discussion about something, head over to our categories and pick one to post in! You can always refer back to a post from Slack Archives if needed; just copy the link to use it as a reference..

Hi all, I am trying to delete category programmatically using spryker category facade. but category

U047BQA5QPL
U047BQA5QPL Posts: 13 🧑🏻‍🚀 - Cadet
edited April 2023 in Help

Comments

  • Alberto Reyer
    Alberto Reyer Lead Spryker Solution Architect / Technical Director Posts: 690 🪐 - Explorer

    Don't get me started on this topic 😄

    There are several issues in the Spryker core and you might have stumbled upon one of those.

    1. There already exists a redirect for this particular url, then the check if the url exists returns false, while in fact the url exists (as a redirect). You can fix it in \Pyz\Zed\Url\Business\Url\UrlUpdater::assertUrlDoesNotExist with
            //case: the url existed before, but was redirected to a new one and now this change is rolled back,
            //meaning the redirect becomes the new url
            if ($existingUrl->getFkResourceRedirect()) {
                $this->urlDeleter->deleteUrlRedirect(
                    (new UrlRedirectTransfer())
                        ->setIdUrlRedirect($existingUrl->getFkResourceRedirect()),
                );
    
                return;
            }
    
  • Alberto Reyer
    Alberto Reyer Lead Spryker Solution Architect / Technical Director Posts: 690 🪐 - Explorer
    1. The url in the DB is /EN/. The comparison in PHP is case sensitive, while the retrieval from the DB is case insensitive, so it will find /EN/ in the DB, but the check if /en/ (your new url) === /EN/ returns false and the url update tries to insert /en/ into the DB, but fails as the collation is case insensitive, which means /en/ === /EN/
  • Alberto Reyer
    Alberto Reyer Lead Spryker Solution Architect / Technical Director Posts: 690 🪐 - Explorer

    I most likely case 1, took me months to find it and the proposed solution is a workaround you should only use if you now that deleting the redirect is acceptable

  • sebastian.larisch
    sebastian.larisch Spryker Customer Posts: 143 🧑🏻‍🚀 - Cadet

    thanks for that, guess this can also some of our problems