2010-10-28 7 views
5

Ho esteso la tabella delle pagine e ora voglio utilizzare alcuni dati in un oggetto di dominio chiamato "Tag".
così ho provato quanto segue nella /Configuration/TypoScript/setup.txt:L'associazione extbase a una tabella esistente non funziona

plugin.myextension.persistence.classes.Tx_myextension_Domain_Model_Tag { 
    mapping { 
     tableName = pages 
     recordType = Tx_myextension_Domain_Model_Tag 
     columns { 
      tx_myextension_tag_name.mapOnProperty = name 
      uid.mapOnProperty = id 
     } 
    } 
} 

ma sembra che l'estensione tenta di accedere al tavolo Tx_myextension_Domain_Model_Tag (che non esiste)

Questo è l'errore che ricevo:

Tx_Extbase_Persistence_Storage_Exception_SqlError`

Table 'tx_myextension_domain_model_tag' non esiste: SELEZIONE tx_myextension_domain_model_tag * F. ROM tx_myextension_domain_model_tag WHERE tx_myextension_domain_model_tag.id = '24' LIMIT 1

Cosa ho fatto di sbagliato?

+0

Hai provato cancellando la linea 'RecordType = Tx_myextension_Domain_Model_Tag'? – Mateng

risposta

0

Tx_myextension_Domain_Model_Tag è il nome del tuo oggetto giusto? Ma immagino che questo non sia il nome del tavolo a cui stai tentando di accedere. Quindi la mia ipotesi è che il nome che stai fornendo nel valore "tableName" sia sbagliato. Cosa contiene "pagine"?

+0

Questo è il nome della classe, hai ragione. La tabella "pagine" è la tabella typo3-pages, quindi contiene tutte le pagine di typo3 (più le colonne che ho aggiunto per l'estensione come [..] tag_name) – hering

+0

Non vedo come si specifica la mappatura nel campione che stai fornendo. Dice solo che il tuo modello di persistenza è consapevole che la classe Tx_myextension_Domain_Model_Tag è mappata, ma specifichi esplicitamente che questa classe è mappata alla tabella che vuoi? In caso contrario, il tuo errore è normale perché prenderebbe il nome della classe come nome della tabella (che, come hai detto, non esiste). – Hal

+0

Ma nella mappatura ho specificato il nome della tabella ('tableName = pages'). Forse ho sbagliato con la sintassi, ma ho pensato che il mio codice avrebbe dovuto fare quello che mi aspettavo: mappare la classe Dominio alla tabella delle pagine e impedire a extbase di tentare di accedere a una tabella chiamata come la classe dominio. – hering

2

hai provato "config.tx_extbase" invece di "plugin.myextension"?

Qualcosa di simile

config.tx_extbase.persistence.classes.Tx_MyExtension_Domain_Model_Tag.mapping.tableName = pages 

funziona per me.

+0

funziona per me (tm) – pduersteler

+0

Non funziona per me. Nella mia estensione ho un modello di dominio 'Tx_Extname_Domain_Model_Member' che estende' Tx_Extbase_Domain_Model_FrontendUser'. Mappo il mio modello a fe_users di 'config.tx_extbase.persistence.classesTx_Extname_Domain_Model_Member.mapping.tableName = fe_users' ma quando provo a salvare un record in BE, ottengo l'errore' Errore SQL: 'Tabella' usrdb_typo3.tx_extname_domain_model_member 'doesn' t esistono''. Quindi presumo che la mappatura non funzioni correttamente. Tuttavia è mostrato nel mio browser degli oggetti TS. – Martin

3

Non dimenticare di includere il modello di estensione del dattiloscritto nel modello (modello> modifica modello intero> include modelli statici), altrimenti il ​​file setup.txt non viene valutato.

0

Avete specificato le singole pagine come tipo di record Tx_myextension_Domain_Model_Tag? Si suppone di andare nel campo doctype della tabella delle pagine (quindi sarà necessario modificare il tipo di dati mysql di quel campo. In caso contrario, Extbase non sa che questa pagina specifica è un record extbase e non una pagina normale Vedi di più su tavolo ereditarietà singola (STI) in Extbase: http://pascal-jungblut.com/blog/blog-post/2010/11/06/single-table-inheritance-in-extbase.html

+0

Il collegamento a Pascal 404 – Mateng

2

Per verificare quale RecordType (s) sono accettabili modulo utilizzare la configurazione in BE, nella sezione TCA $ trovare il vostro tavolo ([pagine] in questo caso) e controllare il tipo column (... [ctrl] [type] - per le pagine è 'doktype', che decide se il page record è standard o sysfolder ecc.)

Questa colonna è tinyint (3) nel database, quindi è possibile non scrivere v alue 'Tx_myextension_Domain_Model_Tag' ad esso. Crea nel tuo nuovo ext doktype identificato dal numero e imposta recordType su di esso.

Facoltativamente, è possibile rimuovere recordType dalla mappatura della configurazione se il tipo di pagina non è rilevante.

0

si fa questo in una chiamata typo3 con eID? qui qualche configurazione non è caricata ..

in caso affermativo, provare se il caricamento di tutta la configurazione risolve il problema:

... 
    $GLOBALS['TSFE'] = \t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS, $_GET["id"], 0, true); 
    //$GLOBALS['TSFE'] = new $temp_TSFEclassName(); 
    $GLOBALS['TSFE']->connectToDB(); 
    $GLOBALS['TSFE']->initFEuser(); 
    $GLOBALS['TSFE']->determineId(); 
    $GLOBALS['TSFE']->getCompressedTCarray(); 
    $GLOBALS['TSFE']->initTemplate(); 
    $GLOBALS['TSFE']->getConfigArray(); 
    ... 
0

prendersi cura della corretta convenzione di denominazione per quanto riguarda FE-Plugin:

plugin.tx_myextension 
Problemi correlati