Skip to content

[5.x]: Error variant missing its inventory item #3837

Open
@jornwildenbeest

Description

@jornwildenbeest

What happened?

Description

Somehow, my best guest is during the upgrade to craft 5 but I am not sure, purchasables where created without inventory.
This results in an error when you want to edit the variant in the cp.

And then there is (as far as I know) no way to re-save the variant or a way to add the inventory for the purchasable manually.

The error:

2025-01-07 08:41:01 [web.ERROR] [TypeError] TypeError: craft\commerce\services\Inventory::getInventoryItemById(): Argument #1 ($id) must be of type int, null given, called in /Users/user/Sites/site-x/vendor/craftcms/commerce/src/services/Inventory.php on line 81 and defined in /Users/user/Sites/site-x/vendor/craftcms/commerce/src/services/Inventory.php:88
Stack trace:
#0 /Users/user/Sites/site-x/vendor/craftcms/commerce/src/services/Inventory.php(81): craft\commerce\services\Inventory->getInventoryItemById(NULL)
#1 /Users/user/Sites/site-x/vendor/craftcms/commerce/src/base/Purchasable.php(903): craft\commerce\services\Inventory->getInventoryItemByPurchasable(Object(craft\commerce\elements\Variant))
#2 /Users/user/Sites/site-x/vendor/craftcms/commerce/src/fieldlayoutelements/PurchasableStockField.php(87): craft\commerce\base\Purchasable->getInventoryItem()
#3 /Users/user/Sites/site-x/vendor/craftcms/cms/src/fieldlayoutelements/BaseField.php(365): craft\commerce\fieldlayoutelements\PurchasableStockField->inputHtml(Object(craft\commerce\elements\Variant), false)
#4 /Users/user/Sites/site-x/vendor/craftcms/cms/src/models/FieldLayout.php(1013): craft\fieldlayoutelements\BaseField->formHtml(Object(craft\commerce\elements\Variant), false)
#5 /Users/user/Sites/site-x/vendor/craftcms/cms/src/web/View.php(1776): craft\models\FieldLayout->craft\models\{closure}()
#6 /Users/user/Sites/site-x/vendor/craftcms/cms/src/models/FieldLayout.php(1012): craft\web\View->namespaceInputs(Object(Closure), NULL)
#7 /Users/user/Sites/site-x/vendor/craftcms/cms/src/controllers/ElementsController.php(937): craft\models\FieldLayout->createForm(Object(craft\commerce\elements\Variant), false, Array)
#8 /Users/user/Sites/site-x/vendor/craftcms/cms/src/controllers/ElementsController.php(411): craft\controllers\ElementsController->_prepareEditor(Object(craft\commerce\elements\Variant), false, true, Object(craft\web\Response), 'cp-screen-38334...', Object(Closure), Object(Closure), Object(Closure))
#9 [internal function]: craft\controllers\ElementsController->craft\controllers\{closure}(Object(craft\web\Response), 'cp-screen-38334...')
#10 /Users/user/Sites/site-x/vendor/craftcms/cms/src/web/CpScreenResponseFormatter.php(67): call_user_func(Object(Closure), Object(craft\web\Response), 'cp-screen-38334...')
#11 /Users/user/Sites/site-x/vendor/craftcms/cms/src/web/CpScreenResponseFormatter.php(48): craft\web\CpScreenResponseFormatter->_formatJson(Object(craft\web\Request), Object(craft\web\Response), Object(craft\web\CpScreenResponseBehavior))
#12 /Users/user/Sites/site-x/vendor/yiisoft/yii2/web/Response.php(1109): craft\web\CpScreenResponseFormatter->format(Object(craft\web\Response))
#13 /Users/user/Sites/site-x/vendor/craftcms/cms/src/web/Response.php(339): yii\web\Response->prepare()
#14 /Users/user/Sites/site-x/vendor/yiisoft/yii2/web/Response.php(340): craft\web\Response->prepare()
#15 /Users/user/Sites/site-x/vendor/yiisoft/yii2/base/Application.php(390): yii\web\Response->send()
#16 /Users/user/Sites/site-x/web/index.php(12): yii\base\Application->run()
#17 /Users/user/.composer/vendor/laravel/valet/server.php(110): require('/Users/user/Sit...')
#18 {main} {"memory":29708304,"exception":"[object] (TypeError(code: 0): craft\\commerce\\services\\Inventory::getInventoryItemById(): Argument #1 ($id) must be of type int, null given, called in /Users/user/Sites/site-x/vendor/craftcms/commerce/src/services/Inventory.php on line 81 at /Users/user/Sites/site-x/vendor/craftcms/commerce/src/services/Inventory.php:88)"}

Steps to reproduce

Not sure how this happend, but is there a way to add a inventory manually or something?

Expected behavior

Create the inventory when it is missing.

Actual behavior

It throws an error, leaving no way to edit the variant.

Craft CMS version

5.5.6

Craft Commerce version

5.2.11

PHP version

8.3

Operating system and version

Mac OS 15.2 (24C101)

Database type and version

MySQL 8.*

Image driver and version

No response

Installed plugins and versions

  • Craft Commerce 5.2.11

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions