UPDATE query on class table inherited entity throwing error from MultiTableUpdateExecutor #6416

Open
opened 2026-01-22 15:32:52 +01:00 by admin · 0 comments
Owner

Originally created by @flaushi on GitHub (Feb 29, 2020).

Bug Report

Q A
BC Break no
Version 2.6.4

Summary

I am trying to UPDATE the base entity of a class table inheritance hierarchy. Bug is similar to #6528

Current behavior

I am getting

Doctrine\DBAL\Exception\DriverException : An exception occurred while executing 'INSERT INTO data_category_id_tmp (id) SELECT t0.id FROM sampled_data_category t0 INNER JOIN data_category d0_ ON t0.id = d0_.id WHERE d0_.dsgvo_description IS NOT NULL AND (DATE(?)-DATE(d0_.deleted_at)) > ?' with params ["2020-02-29 08:01:23.416047", "2020-02-29 08:01:23.416047", 3650]:

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined
 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php:79
 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:166
 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:146
 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1069
 /Users/oliverdemetz/git/risklytics/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php:175

How to reproduce

My base class

/**
 * @ORM\Entity(repositoryClass="App\Repository\DataCategoryRepository", readOnly=true)
 * @ORM\InheritanceType("JOINED")
 * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="default")
 * @UniqueEntity("name")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 */
abstract class DataCategory implements JsonSerializable { ... }

derived:

/**
 * @ORM\Entity(readOnly=true)
 * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="default")
 */
class SampledDataCategory extends DataCategory { ...}

the query is :

$this->em->createQuery(
<<<DQL
    UPDATE App\Entity\SampledDataCategory d
    SET d.dsgvoDescription = CONCAT('dsgvo-delete-', :now)
    WHERE d.dsgvoDescription IS NOT NULL
    AND DATE_DIFF(:now, d.deletedAt) > :numDays
DQL
        )->setParameter('numDays', $this->dsgvoDeleteAfterDays)
            ->setParameter('now', Carbon::now(), 'datetime')
            ->execute();

Expected behavior

The update should just work.
The almost same query does work well on other non-inherited entities.

Originally created by @flaushi on GitHub (Feb 29, 2020). ### Bug Report | Q | A |------------ | ------ | BC Break | no | Version | 2.6.4 #### Summary I am trying to UPDATE the base entity of a class table inheritance hierarchy. Bug is similar to #6528 #### Current behavior I am getting ```php Doctrine\DBAL\Exception\DriverException : An exception occurred while executing 'INSERT INTO data_category_id_tmp (id) SELECT t0.id FROM sampled_data_category t0 INNER JOIN data_category d0_ ON t0.id = d0_.id WHERE d0_.dsgvo_description IS NOT NULL AND (DATE(?)-DATE(d0_.deleted_at)) > ?' with params ["2020-02-29 08:01:23.416047", "2020-02-29 08:01:23.416047", 3650]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractPostgreSQLDriver.php:79 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:166 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php:146 /Users/oliverdemetz/git/risklytics/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php:1069 /Users/oliverdemetz/git/risklytics/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php:175 ``` #### How to reproduce My base class ```php /** * @ORM\Entity(repositoryClass="App\Repository\DataCategoryRepository", readOnly=true) * @ORM\InheritanceType("JOINED") * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="default") * @UniqueEntity("name") * @ORM\DiscriminatorColumn(name="discr", type="string") */ abstract class DataCategory implements JsonSerializable { ... } ``` derived: ```php /** * @ORM\Entity(readOnly=true) * @ORM\Cache(usage="NONSTRICT_READ_WRITE", region="default") */ class SampledDataCategory extends DataCategory { ...} ``` the query is : ```php $this->em->createQuery( <<<DQL UPDATE App\Entity\SampledDataCategory d SET d.dsgvoDescription = CONCAT('dsgvo-delete-', :now) WHERE d.dsgvoDescription IS NOT NULL AND DATE_DIFF(:now, d.deletedAt) > :numDays DQL )->setParameter('numDays', $this->dsgvoDeleteAfterDays) ->setParameter('now', Carbon::now(), 'datetime') ->execute(); ``` #### Expected behavior The update should just work. The almost same query does work well on other non-inherited entities.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: doctrine/archived-orm#6416