Project

General

Profile

Actions

Bug #103604

open

MM table generation sets wrong PRIMARY KEY for columns with multiple=1

Added by Oliver Eglseder 25 days ago. Updated 15 days ago.

Status:
Needs Feedback
Priority:
Should have
Assignee:
-
Category:
-
Target version:
-
Start date:
2024-04-11
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
12
PHP Version:
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

A TCA select column with multiple=1 generates a PRIMARY KEY over the fields `uid_local` and `uid_foreign` of the MM table.
When multiple is active, i can select a record from `tx_tea_domain_model_coffee` multiple times.
When i save the record i get the exception `An exception occurred while executing a query: Duplicate entry '1-2' for key 'tx_tea_tea_coffee_mm.PRIMARY'`

TCA column:

'test' => [
    'exclude' => 1,
    'l10n_mode' => 'exclude',
    'label' => 'test',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'foreign_table' => 'tx_tea_domain_model_coffee',
        'foreign_table_where' => 'AND tx_tea_domain_model_coffee.sys_language_uid IN (-1,0) Order by title ASC',
        'MM' => 'tx_tea_tea_coffee_mm',
        'size' => 10,
        'autoSizeMax' => 30,
        'maxitems' => 9999,
        'multiple' => 1,
    ],
],

Database Analyzer Output:

CREATE TABLE tx_tea_tea_coffee_mm (
    uid_local INT UNSIGNED DEFAULT 0 NOT NULL,
    uid_foreign INT UNSIGNED DEFAULT 0 NOT NULL,
    sorting INT UNSIGNED DEFAULT 0 NOT NULL,
    sorting_foreign INT UNSIGNED DEFAULT 0 NOT NULL,
    INDEX uid_local (uid_local),
    INDEX uid_foreign (uid_foreign),
    PRIMARY KEY(uid_local, uid_foreign)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB


Related issues 2 (0 open2 closed)

Related to TYPO3 Core - Task #101425: TYPO3 and MariaDB Galera Cluster (PRIMARY KEY)Closed2023-07-24

Actions
Related to TYPO3 Core - Task #101554: Get rid of MM_hasUidFieldClosed2023-08-03

Actions
Actions #1

Updated by Oliver Eglseder 25 days ago

  • Description updated (diff)
Actions #2

Updated by Stefan Bürk 15 days ago

  • Status changed from New to Needs Feedback

In TYPO3 v12 the field config MM_hasUidField is required to be
set in conjuction with multiple = true for following TCA types

  • select
  • group
  • inline
  • category

and only if defined on the local side for a MM relation, which
means the one without the MM_opposite_field configuration.

Granted, the documentation only mention TCA type group for
that option [1], which is literally not the complete list.
That means the documentation needs to be corrected if I'm
correct that this options is required.

NOTE: This already changed with TYPO3 v13 where MM_hasUidField has
been removed, with Issue #101554 [2] and also related to #101425
for issues with MySQL Galera Clusters.

That means, your TCA configuration should be:

'test' => [
    'exclude' => 1,
    'l10n_mode' => 'exclude',
    'label' => 'test',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectMultipleSideBySide',
        'foreign_table' => 'tx_tea_domain_model_coffee',
        'foreign_table_where' => 'AND tx_tea_domain_model_coffee.sys_language_uid IN (-1,0) Order by title ASC',
        'MM' => 'tx_tea_tea_coffee_mm',        
        'size' => 10,
        'autoSizeMax' => 30,
        'maxitems' => 9999,
        'multiple' => 1,
        'MM_hasUidField' => true, // <--- THIS ONE should be required because of `multiple: 1`
    ],
],

[1] https://docs.typo3.org/m/typo3/reference-tca/12.4/en-us/ColumnsConfig/Type/Group/Properties/Mm.html#confval-mm-hasuidfield-type-group
[2] Issue #101554 https://review.typo3.org/c/Packages/TYPO3.CMS/+/80434

Actions #3

Updated by Stefan Bürk 15 days ago

  • Related to Task #101425: TYPO3 and MariaDB Galera Cluster (PRIMARY KEY) added
  • Related to Task #101554: Get rid of MM_hasUidField added
Actions

Also available in: Atom PDF