Ergebnis 1 bis 8 von 8

Thema: Index erhalten - Contao 5.4.3

  1. #1
    Contao-Nutzer
    Registriert seit
    19.10.2023.
    Beiträge
    22

    Standard Index erhalten - Contao 5.4.3

    Hallo,
    ich benötige in einigen Tabellen Foreign- und Unique Keys. Derzeit überschreibt der Backup Manager diese Schlüssel. Leider konnte ich bislang keinen Weg finden, das zu unterbinden. Exemplarisch ein UNIQUE Index wie dieser:
    Code:
    ALTER TABLE `kromi_invoices`
    ADD UNIQUE KEY `invoiceNo` (`invoiceNo`);

    Im DCA ist dieses Feld so konfiguriert (Empfehlung ChatGPT)

    PHP-Code:
    //1. Variante
    'invoiceNo' => [
        
    'search' => true,
        
    'sorting' => true,
        
    'inputType' => 'text',
        
    'eval' => [
            
    'tl_class' => 'w25',
            
    'maxlength' => 255,
            
    'mandatory' => true,
            
    'unique' => true,
        ],
        
    'sql' => "varchar(50) NOT NULL default ''"
    ],

    //2. Variante
    'invoiceNo' => [
        
    'search' => true,
        
    'sorting' => true,
        
    'inputType' => 'text',
        
    'eval' => [
            
    'tl_class' => 'w25',
            
    'maxlength' => 255,
            
    'mandatory' => true,
            
    'unique' => true,
        ],
        
    'sql' => "varchar(50) NOT NULL default '' UNIQUE"
    ], 
    Keine dieser Varianten verhindert, dass ein Schema Update vorgenommen werden soll - der Backup Manager zeigt in der Console:

    22.05.2025_07.31.57_REC.png
    Schema Updates
    DROP INDEX invoiceNo ON kromi_invoices


    Hat jemand eine Idee, wie ich den Index erhalten kann?
    Vielen Dank,
    Andreas

  2. #2
    Contao-Fan Avatar von lbableck
    Registriert seit
    10.06.2021.
    Beiträge
    337
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Keys und Indexe setzt du nicht beim Feld (da ein Key/Index ja auch aus mehreren Feldern bestehen kann), sondern in der config des DCAs.
    Siehe https://docs.contao.org/dev/referenc...-configuration
    Die Doku ist da btw. eine deutlich bessere Hilfestellung als ChatGPT
    Geändert von lbableck (22.05.2025 um 07:39 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    19.10.2023.
    Beiträge
    22

    Standard Unique index

    Perfekt - das hat funktioniert!

    Du hattest es bereits erwähnt, jedoch finde ich in der Dokumentation keinen Hinweis, wie ich zusätzlich einen Fremdschlüssel auf eine andere Tabelle setzen, z.B. die Invoice-Kategorie, die im DCA so angelegt ist:

    Code:
            'categoryId' => array
            (
                'inputType'               => 'select',
                'filter'                  => true,
                'search'                  => true,
                'foreignKey'              => 'kromi_invoices_cat.name',   
                'relation'                => ['type' => 'hasOne', 'load' => 'lazy'],               
                'eval'                    => array('includeBlankOption'=>true,'tl_class'=>'w50 wizard'),
                'sql' => ['type' => 'integer', 'length' => 10, 'default' => 0]
            ),
    Vermutlich werde ich hier etwas hinzufügen müssen, das den Foreign Key definert:

    Code:
    $GLOBALS['TL_DCA']['kromi_invoices'] = [
        'config' => [
            'dataContainer' => DC_Table::class,
            'enableVersioning' => true,
            'switchToEdit' => true,
            'sql' => [
                'keys' => [
                    'id' => 'primary',
                    'invoiceNo' => 'unique',
                ],
            ],
        ],
    Es wäre nett, wenn ich auch hier einen kleinen Anschub bekommen könnte. Bis hierhin jedoch schon einmal herzlichen Dank.

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.158
    Partner-ID
    10107

    Standard

    Foreign Key Constraints werden im DCA nicht unterstützt, da müsstest du stattdessen Entities verwenden.
    » sponsor me via GitHub or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    19.10.2023.
    Beiträge
    22

    Standard Entities

    Hallo Spooky,
    ich verstehe es so, dass ich die Schlüssel direkt in den Tabellen setze. Das hatte ich ursprünglich so gemacht, bis ich nach getaner Arbeit feststellen musste, dass der Backen-Manager sämtliche Schlüssel wieder entfernen würde, wenn man ihn ließe. Ich habe dann versucht, ihn davon abzuhalten, dachte es wäre im DCA möglich - etwa hier:
    Code:
            'costcenterId' => array
            (
                'sorting' => true,
                'inputType'               => 'select',
                'filter'                  => true,
                'search'                  => true,
                'foreignKey'              => "kromi_costcenter.CONCAT(name,' - ',description)",   
                'relation'                => ['type' => 'hasOne', 'load' => 'lazy'],            
                'eval'                    => array('includeBlankOption'=>true,'tl_class'=>'w50 wizard'),
                'sql'                     => ['type' => 'integer', 'unsigned' => true, 'default' => 0]
            ),
    Aber das hat scheinbar keinen Einfluss. Gibt es eine Möglichkeit, Contao vom Löschen der Keys abzuhalten?

    Vielen Dank.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.158
    Partner-ID
    10107

    Standard

    Willst du nun Constraints oder Indexes?
    » sponsor me via GitHub or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    19.10.2023.
    Beiträge
    22

    Standard

    Entschuldige bitte, wenn ich nicht präzise war. Es soll ein Foreign Key, also Constraint sein, exemplarisch wie hier:

    -- Parent table
    CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100)
    );

    -- Child table
    CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
    );

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    37.158
    Partner-ID
    10107

    Standard

    Das wird mit dem DCA leider nicht unterstützt. Du müsstest dafür stattdessen Doctrine Entities nutzen - dort kann man das definieren.
    » sponsor me via GitHub or Revolut

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •