Extbase Record Relation von eigener Tabelle zu tt_content [Gelöst]

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    27. 07. 2011, 17:30

    Hi,

    Ich bin gerade an meinem ersten Extbase Projekt. Ich habe Project Datensätze, die tt_content Elemente enthalten. So weit so gut. Da man Core-Tabellen wie tt_content im EXT:extension_kickstarter nicht mit eigenen Tabellen verbinden kann, habe ich erst mal eine Dummy Tabelle "content" im Extbase Kickstarter angelegt und diese mit dem Projekt verbunden und dann im TCA und Typoscript die Tabelle meines Content-Models wieder auf tt_content geändert. Im Backend kann man problemlos tt_content Elemente über IRRE dem Projekt zuordnen. Aber wenn ich die Content Elemente im Fluid-Template ausgeben will, behauptet das Projekt Model, es hätte keine Content-Elemente in seinem ObjectStorage.

    Classes/Domain/Model/Project.php:

    1. class Tx_Nhb_Domain_Model_Project extends
    2. Tx_Extbase_DomainObject_AbstractEntity {
    3.  
    4. ...
    5.  
    6. /**
    7. * Content
    8. *
    9. * @var Tx_Extbase_Persistence_ObjectStorage<Tx_Nhb_Domain_Model_Content> $content
    10. */
    11. protected $content;
    12.  
    13. ...
    14.  
    15. /**
    16. * Returns the content
    17. *
    18. * @return Tx_Extbase_Persistence_ObjectStorage<Tx_Nhb_Domain_Model_Content> $content
    19. */
    20. public function getContent() {
    21. return $this->content;
    22. }
    23.  
    24. ...
    25.  
    26. }

    Classes/Domain/Model/Content.php:

    1. class Tx_Nhb_Domain_Model_Content extends Tx_Extbase_DomainObject_AbstractValueObject {
    2.  
    3. /**
    4. * __construct
    5. *
    6. * @return void
    7. */
    8. public function __construct() {
    9.  
    10. }
    11.  
    12. }

    Typoscript:

    1. plugin.tx_nhb {
    2. persistence {
    3. classes {
    4. Tx_Nhb_Domain_Model_Content {
    5. mapping {
    6. tableName = tt_content
    7. recordType = Tx_Nhb_Domain_Model_Content
    8. columns {
    9. }
    10. }
    11. }
    12. }
    13. }
    14. }

    TCA:

    1. $TCA['tx_nhb_domain_model_project'] = array(
    2. ...
    3. 'columns' => array(
    4. ...
    5. 'content' => array(
    6. 'exclude' => 0,
    7. 'label' => 'LLL:EXT:nhb/Resources/Private/Language/locallang_db.xml:tx_nhb_domain_model_project.content',
    8. 'config' => array(
    9. 'type' => 'inline',
    10. 'foreign_table' => 'tt_content',
    11. 'foreign_field' => 'project',
    12. 'maxitems' => 9999,
    13. 'appearance' => array(
    14. 'collapse' => 0,
    15. 'levelLinksPosition' => 'top',
    16. 'showSynchronizationLink' => 1,
    17. 'showPossibleLocalizationRecords' => 1,
    18. 'showAllLocalizationLink' => 1
    19. ),
    20. ),
    21. ),
    22.  
    23. ...
    24.  
    25. ),
    26. );

    SQL:

    1. CREATE TABLE tt_content (
    2. project INT(11) UNSIGNED DEFAULT '0' NOT NULL
    3. );

    ext_tables.php:

    1. t3lib_div::loadTCA('tt_content');
    2. $TCA['tt_content']['columns']['project']['config']['type'] = 'passthrough';

    $this->content in class Classes/Domain/Model/Project.php ist immer leer, obwohl das Project in der Datenbank 3 tt_content elemente zugeordnet hat.

    In mysql steht tx_nhb_domain_model_project.content (id: 1) auf 3 und die zugeordneten tt_content Elemente (ids: 15, 14, 13) haben alle tt_content.project auf 1 stehen. Das ist beides korrekt gespeichert.

    In Fluid versuche ich nur mal die uids der Elemente auszugeben:

    1. <f:for each="{project.content}" as="content">
    2. {content.uid}<br />
    3. </f:for>

    Eigentlich kann nur eine Kleinigkeit falsch sein, aber ich finde keine Doku für diesen etwas abgefahrenen Fall, die mir das klar macht, was hier falsch sein könnte.

    http://www.aemka.de/


  • 1
  • Eydamos Eydamos
    Padawan
    0 x
    54 Beiträge
    0 Hilfreiche Beiträge
    28. 07. 2011, 09:15

    Ist dein Feld projekt überhaupt in der tt_content Tabelle angelegt worden?

    Dein SQL Statement ist nämlich falsch mit CREATE TABLE würde die Datenbank versuchen die Tabelle tt_content zu erstellen und mit einer Fehlermeldung aussteigen da sie schon existiert.

    Richtig wäre es:

    1. ALTER TABLE tt_content ADD (
    2. project INT(11) UNSIGNED DEFAULT '0' NOT NULL
    3. );

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    28. 07. 2011, 09:35

    Das Feld ist angelegt und ist gefüllt. Die Syntax ist so für den das Database Compare des TYPO3 Core schon richtig.

    http://www.aemka.de/

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    28. 07. 2011, 10:06

    Ein netter Mensch aus der Newsgroup hat es gelöst:

    Das recordType Setting im TS musste weg, dann geht es.

    Erklärung:

    ---
    If you are setting the recordType in above TS then you must have a field
    defined by $TCA['tt_content']['ctrl']['type'] in tt_content which in
    your case is already present "CType".

    So you just need to set the value of this field (tt_content.CType) to
    'Tx_Nhb_Domain_Model_Content' and then hopefully it should work OR
    remove the recordType setting from above TS ;)
    ---

    http://www.aemka.de/

  • MorphexX MorphexX
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    30. 04. 2012, 22:44

    Danke für den Thread - er passt fast genau auf mein aktuelles Problem.
    Allerdings habe ich dein Setup gegen meines gehalten und übernommen, habe jedoch immer noch Schwierigkeiten.

    Ich erhalte beim Zugriff auf project.content / content.uid in einer for each-Schleife, folgende Exception:

    #1247602160: Table 't3extdev.tx_extname_domain_model_content' doesn't exist: SELECT COUNT(*) FROM tx_extname_domain_model_content WHERE tx_extname_domain_model_content.project = '5' (More information)

    Und ich habe bereits die Persistenz-Schicht im TS umgemapped. Ich bin gerade etwas ratlos.

    Ich bin für jede Hilfe dankbar.

  • aemka aemka
    Jedi-Ratsmitglied
    0 x
    562 Beiträge
    9 Hilfreiche Beiträge
    01. 05. 2012, 09:00

    Anahnd der Meldung kann mal kombinieren, dass den TS nicht wirksam ist.

    http://www.aemka.de/

  • MorphexX MorphexX
    Padawan
    0 x
    46 Beiträge
    0 Hilfreiche Beiträge
    01. 05. 2012, 14:34

    Einen ganz herzlichen Dank, [b]aemka[/b]! Voll ins Schwarze!

    Das statische Extension Template war nicht mehr eingebunden, nachdem ich ein paar String Replacements bzgl. des Extension-Namen vorgenommen habe.

    Erneut eingebunden - alles gut! :)

  • 1