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

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 16

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Das könnte dich auch interessieren …

7 Antworten

  1. Michael Dittberner sagt:

    Hallo Patrick,
    vielen Dank für Deine ausführliche Schilderung. Ich hatte das Problem auch, bei mir hat letztendlich eine Umsortierung der Reihenfolge in der PackageStates.php geholfen. Die Erweiterungen der Newstabelle können anscheinend nur dann greifen, wenn die News-Extension vorher geladen wird.

  2. Mel sagt:

    Danke Danke Danke Patrick!
    Du hast meinem 3h Leiden ein Ende bereitet.

    Was ich allerdings nicht verstehen ist, weshalb du die Klasse umbiegen musst.

  3. Armin sagt:

    Danke Patrick & Michael, bei mir war es auch die Reihenfolge in der PackageStates.php

  4. Martin sagt:

    In TYPO3 11 gibt es die PackageStates.php ja nicht mehr. Wenn die Dependency in der composer.json der erweitenden Extension konfiguriert ist, wird die Ladereihenfolge aber hierüber gesteuert.

  5. Jacco sagt:

    In the composer.json of the extended extension for news add

    „require“: {
    „georgringer/news“: „^9.4“,
    „typo3/cms-core“: „^11.5“
    },

  6. Christoph sagt:

    Guter Beitrag Patrik und speziellen Dank an Jacco, das require in der composer.json war auch bei mir das Problem. Immer wieder schön zu sehen, dass andere die selben Probleme haben 😀

  7. Karsten Sommer sagt:

    Vielen Dank für deine ausführliche Schilderung. Das Problem tritt aktuell mit TYPO3 11.5.24 und News 10.0.3 immer noch auf. Da ich eine Composer Installation nutze, kann man die Extensions nicht deaktivieren. Ein beherztes ‚composer dumpautoload‘ auf der Kommandozeile hat das Problem gelöst.

Schreibe einen Kommentar

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