Open timkelty opened 4 years ago
Please look for that error in storage/logs/web.log
and post the stack trace.
My bad, thought I had:
2020-07-16 15:40:38 [-][2][68ce025dbec88623fb8f7d2465532a7a][error][yii\db\IntegrityException] PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`craftcms_local`.`relations`, CONSTRAINT `relations_targetId_fk` FOREIGN KEY (`targetId`) REFERENCES `elements` (`id`) ON DELETE CASCADE) in /app/vendor/composer/yiisoft/yii2/db/Command.php:1293
Stack trace:
#0 /app/vendor/composer/yiisoft/yii2/db/Command.php(1293): PDOStatement->execute()
#1 /app/vendor/composer/yiisoft/yii2/db/Command.php(1093): yii\db\Command->internalExecute('INSERT INTO `re...')
#2 /app/vendor/composer/craftcms/cms/src/helpers/Db.php(734): yii\db\Command->execute()
#3 /app/vendor/composer/craftcms/cms/src/services/Relations.php(107): craft\helpers\Db::batchInsert('{{%relations}}', Array, Array)
#4 /app/vendor/composer/craftcms/cms/src/fields/BaseRelationField.php(747): craft\services\Relations->saveRelations(Object(craft\fields\Assets), Object(craft\elements\Entry), Array)
#5 /app/vendor/composer/craftcms/cms/src/fields/Assets.php(543): craft\fields\BaseRelationField->afterElementSave(Object(craft\elements\Entry), true)
#6 /app/vendor/composer/craftcms/cms/src/base/Element.php(3138): craft\fields\Assets->afterElementSave(Object(craft\elements\Entry), true)
#7 /app/vendor/composer/craftcms/cms/src/elements/Entry.php(1454): craft\base\Element->afterSave(true)
#8 /app/vendor/composer/craftcms/cms/src/services/Elements.php(2343): craft\elements\Entry->afterSave(true)
#9 /app/vendor/composer/craftcms/cms/src/services/Elements.php(690): craft\services\Elements->_saveElementInternal(Object(craft\elements\Entry), true, false, true)
#10 /app/vendor/composer/craftcms/cms/src/controllers/EntriesController.php(379): craft\services\Elements->saveElement(Object(craft\elements\Entry))
#11 [internal function]: craft\controllers\EntriesController->actionSaveEntry(false)
#12 /app/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#13 /app/vendor/composer/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams(Array)
#14 /app/vendor/composer/craftcms/cms/src/web/Controller.php(199): yii\base\Controller->runAction('save-entry', Array)
#15 /app/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('save-entry', Array)
#16 /app/vendor/composer/craftcms/cms/src/web/Application.php(289): yii\base\Module->runAction('entries/save-en...', Array)
#17 /app/vendor/composer/craftcms/cms/src/web/Application.php(558): craft\web\Application->runAction('entries/save-en...', Array)
#18 /app/vendor/composer/craftcms/cms/src/web/Application.php(268): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#19 /app/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#20 /app/public/index.php(5): yii\base\Application->run()
#21 {main}
Next yii\db\IntegrityException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`craftcms_local`.`relations`, CONSTRAINT `relations_targetId_fk` FOREIGN KEY (`targetId`) REFERENCES `elements` (`id`) ON DELETE CASCADE)
The SQL being executed was: INSERT INTO `relations` (`fieldId`, `sourceId`, `sourceSiteId`, `targetId`, `sortOrder`, `dateCreated`, `dateUpdated`, `uid`) VALUES (258, 142923, NULL, 0, 1, '2020-07-16 19:40:38', '2020-07-16 19:40:38', '77cd6753-8636-4014-8cc2-6e8e2b25051f') in /app/vendor/composer/yiisoft/yii2/db/Schema.php:677
Stack trace:
#0 /app/vendor/composer/yiisoft/yii2/db/Command.php(1298): yii\db\Schema->convertException(Object(PDOException), 'INSERT INTO `re...')
#1 /app/vendor/composer/yiisoft/yii2/db/Command.php(1093): yii\db\Command->internalExecute('INSERT INTO `re...')
#2 /app/vendor/composer/craftcms/cms/src/helpers/Db.php(734): yii\db\Command->execute()
#3 /app/vendor/composer/craftcms/cms/src/services/Relations.php(107): craft\helpers\Db::batchInsert('{{%relations}}', Array, Array)
#4 /app/vendor/composer/craftcms/cms/src/fields/BaseRelationField.php(747): craft\services\Relations->saveRelations(Object(craft\fields\Assets), Object(craft\elements\Entry), Array)
#5 /app/vendor/composer/craftcms/cms/src/fields/Assets.php(543): craft\fields\BaseRelationField->afterElementSave(Object(craft\elements\Entry), true)
#6 /app/vendor/composer/craftcms/cms/src/base/Element.php(3138): craft\fields\Assets->afterElementSave(Object(craft\elements\Entry), true)
#7 /app/vendor/composer/craftcms/cms/src/elements/Entry.php(1454): craft\base\Element->afterSave(true)
#8 /app/vendor/composer/craftcms/cms/src/services/Elements.php(2343): craft\elements\Entry->afterSave(true)
#9 /app/vendor/composer/craftcms/cms/src/services/Elements.php(690): craft\services\Elements->_saveElementInternal(Object(craft\elements\Entry), true, false, true)
#10 /app/vendor/composer/craftcms/cms/src/controllers/EntriesController.php(379): craft\services\Elements->saveElement(Object(craft\elements\Entry))
#11 [internal function]: craft\controllers\EntriesController->actionSaveEntry(false)
#12 /app/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#13 /app/vendor/composer/yiisoft/yii2/base/Controller.php(180): yii\base\InlineAction->runWithParams(Array)
#14 /app/vendor/composer/craftcms/cms/src/web/Controller.php(199): yii\base\Controller->runAction('save-entry', Array)
#15 /app/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('save-entry', Array)
#16 /app/vendor/composer/craftcms/cms/src/web/Application.php(289): yii\base\Module->runAction('entries/save-en...', Array)
#17 /app/vendor/composer/craftcms/cms/src/web/Application.php(558): craft\web\Application->runAction('entries/save-en...', Array)
#18 /app/vendor/composer/craftcms/cms/src/web/Application.php(268): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#19 /app/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#20 /app/public/index.php(5): yii\base\Application->run()
#21 {main}
Additional Information:
Array
(
[0] => 23000
[1] => 1452
[2] => Cannot add or update a child row: a foreign key constraint fails (`craftcms_local`.`relations`, CONSTRAINT `relations_targetId_fk` FOREIGN KEY (`targetId`) REFERENCES `elements` (`id`) ON DELETE CASCADE)
)
Are you able to run Xdebug on this machine? If so can you set a breakpoint in app/vendor/composer/craftcms/cms/src/services/Relations.php
line 107, and see if you can tell what the foreign key constraint violation is likely to be? Kinda stumped.
I can! coming right up…
@brandonkelly $targetIds
passed to saveRelations
is an array, but not of IDs, it's the filename of the asset. Since the targetId is an Int, it gets inserted as 0
, thus the violation.
@brandonkelly Derp – realized my form didn't have enctype="multipart/form-data"
… with it, all is well.
Though perhaps this case should be caught anyway?
I have a frontend
entries/save-entry
with a file input for an assets field.Looks like some params aren't getting set in the query, causing a constraint violation. Same form worked in 3.4.
Additional info