There is no column with name ‚t3ver_oid‘ on table ‚tx_news_domain_model_news‘

Als ich vor kurzem die News Extension – um genauer zu sein, die Artikel – um ein zusätzliches Feld im Backend erweitern wollte, bin ich in ein Problem gestolpert, das mir doch recht lange Kopfzerbrechen bereitet hat. Obwohl mein Code grundsätzlich nach mehrmaligem Überprüfen absolut stimmig zu sein schien, wollte die Datenbank Analyse vom TYPO3 Backend einfach nicht locker lassen.
Der Fehler
There is no column with name ‚t3ver_oid‘ on table ‚tx_news_domain_model_news‘
ließ sich anscheinend nicht beheben.

Dabei hatte ich für mein zusätzliches Feld einen Eintrag in der ext_tables.sql angelegt:

CREATE TABLE tx_news_domain_model_news (
    news_layout                 VARCHAR(255)        DEFAULT '0' NOT NULL
);

Auch alles was für das TCA Modell benötigt wird, war in einer extra Datei namens „410_tx_news_domain_model_news.php„, im TCA/Overrides Order meiner Extension, um das Feld hinzu zu fügen:

<?php

defined('TYPO3_MODE') || die();
$ll = 'LLL:EXT:news/Resources/Private/Language/locallang_db.xlf:';

$GLOBALS['TCA']['tx_news_domain_model_news']['types']['0'] = array_replace_recursive(
    $GLOBALS['TCA']['tx_news_domain_model_news']['types']['0'],
    [
    'showitem' => '
            --palette--;;paletteCore,title,--palette--;;paletteSlug,teaser,
            --palette--;;paletteDate,
            bodytext,
        --div--;' . $ll . 'tx_news_domain_model_news.content_elements,
            content_elements,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.appearance,
            news_layout,    
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.media,
            fal_media,fal_related_files,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:categories,
            categories,
        --div--;' . $ll . 'tx_news_domain_model_news.tabs.relations,
            related,related_from,
            related_links,tags,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.metadata,
            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.editorial;paletteAuthor,
            --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.palettes.metatags;metatags,
            --palette--;' . $ll . 'tx_news_domain_model_news.palettes.alternativeTitles;alternativeTitles,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:language,
            --palette--;;paletteLanguage,
        --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:access,
            --palette--;;paletteHidden,
            --palette--;;paletteAccess,
        --div--;' . $ll . 'notes,
            notes,
        --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_tca.xlf:pages.tabs.extended,
        '
    ]
);
$additionalColumns = [
    'news_layout' => [
        'exclude' => true,
        'label' => 'Layout',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectSingle',
            'multiple' => false,
            'minitems' => 1,
            'maxitems' => 2,
            'items' => [
                ['Graue Bild-Sidebar', 0],
                ['Bilder integriert (ohne Sidebar)', 1],
            ],
            'default' => 0,
        ]
    ],
];
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tx_news_domain_model_news', $additionalColumns);

Ich hatte auch daran gedacht, dass ich dem News Domain Model meinen neuen Eintrag irgendwie mitgeben muss und habe deshalb in meiner Extension unter Classes/Domain/Model eine neue Klasse angelegt und sie von \GeorgRinger\News\Domain\Model\NewsDefault erben lassen und sogar darauf geachtet, dass mein Variablen Name (nur) an dieser Stelle im upperCamelCase vorliegt:

<?php
namespace Kunde\Kunde\Domain\Model;

/**
 * News model for additional Layouts
 *
 * @package TYPO3
 * @subpackage tx_news
 */
class NewsExtended extends \GeorgRinger\News\Domain\Model\NewsDefault
{
    /**
     * @var string
     */
    protected $newsLayout;

    /**
     * Get News Layout
     *
     * @return string
     */
    public function getNewsLayout()
    {
        return $this->newsLayout;
    }

    /**
     * Set News Layout
     *
     * @param $newsLayout
     * @return void
     */
    public function setNewsLayout($newsLayout)
    {
        $this->newsLayout = $newsLayout;
    }
}

Natürlich musste ich im Setup innerhalb des Typoscripts auch noch die Klasse umbiegen, damit meine Extension nicht das originale News Domain Model verwendet, sondern stattdessen meine erweiterte Klasse:

plugin.tx_news {
    persistence {
        classes {
            GeorgRinger\News\Domain\Model\News {
                subclasses {
                    0 = Kunde\Kunde\Domain\Model\NewsExtended
                }
            }
            Kunde\Kunde\Domain\Model\NewsExtended {
                mapping {
                    recordType = 0
                    tableName = tx_news_domain_model_news
                }
            }
        }
    }
}

„Soweit, so gut“ dachte ich, doch dann trat der Fehler zum ersten mal auf.
Eine kleine Recherche ergab aber, dass ich vergessen hatte in der ext_emconf.php eine Abhängigkeit auf die News Extension zu definieren. Das war aber schnell mit dem kleinen Eintrag ’news‘ => ‚7.3.0-7.3.99‘, innerhalb von ‚constraints‚ auch gelöst:

<?php

$EM_CONF[$_EXTKEY] = [
// ...

	'constraints' => [
		'depends' => [
			'typo3' => '9.5.0-9.5.99',
			'vhs' => '',
            'news' => '7.3.0-7.3.99',
			'ws_t3bootstrap' => '2.4.0',
            'ws_scss' => ''
        ],
		'conflicts' => [
        ],
		'suggests' => [
        ],
    ],

// ...
];

Jetzt sollte es eigentlich klappen! Einmal im Backend unter Wartung Dump Autoload ausführen und danach die Datenbank Analyse anschmeißen : )
… leider löste es das Problem nicht. Die Fehlermeldung blieb die selbe. Was hatte ich also falsch gemacht? Nach einigen Stunden Fehlersuche, Recherche und einem genauen Blick, ob ich mich nicht doch irgendwo vertippt hatte… nichts… alles schien absolut richtig zu sein.
Und das war es auch.

Was das Problem letztendlich löste, war ein simples deaktivieren und erneutes reaktivieren der Extension
.
Ich dachte bis dahin, dass Dump Autoload quasi das selbe macht aber offensichtlich hatte ich mich geirrt.
Jetzt bin ich jedenfalls schlauer und möchte euch die stundenlange Fehlersuche ersparen, falls ihr einmal in die selbe Situation geraten solltet.

Viele Grüße aus Aachen,

Patrik Tschersich

Das könnte Dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.