[Frage] m:n-Relation mit Property in _mm-Table (Extension Builder) [Gelöst]

  • chris_m chris_m
    T3PO
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    08. 03. 2018, 13:22

    Ziel:
    Es gibt Kunden und Seminare, jeder Kunde kann mehrere Seminare buchen, jedes Seminar kann mehrere Kunden haben. Dazu habe ich im Extension Builder zwischen Kunde und Seminar eine m:n-Relation angelegt und alles funktioniert perfekt.

    Nun möchte ich ein Attribut / Property für "Seminargebühr bezahlt" ('paid') verwenden. Der Logik nach, sollte das in die _mm-Tabelle zur entsprechenden Relation zwischen Kunde und Seminar.

    Dies wird vom Extension Builder so nicht unterstützt, und die Informationen, die ich zu diesem Thema gefunden habe, bieten keine Lösung bzw. sind nicht mehr aktuell.

    Kann mich jemand in die richtige Richtung für eine Lösung stoßen?

    Tags: Extbase
  • chris_m chris_m
    T3PO
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    13. 03. 2018, 10:21 - Lösung

    Nach weiterer Recherche ist der Ansatz, Informationen in die _mm-Tabelle zu schreiben, nach meinem Verständnis nicht "korrekt" im Sinne des DDD und wird damit nicht richtig von Extbase unterstützt. Daher habe ich die m:n-Beziehung aufgelöst und noch eine Entity "Seminarbuchung" eingeführt, die zwischen Kunde und Seminar steht und die die zusätzlichen Daten enthält.


  • 1
  • pstranghoener pstrangho...
    Die Macht
    0 x
    504 Beiträge
    22 Hilfreiche Beiträge
    09. 03. 2018, 15:42

    Hey chris_,
    kannst du mal den Code dazu posten?

    Grüße
    Philipp

  • chris_m chris_m
    T3PO
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    10. 03. 2018, 11:10

    Hallo Philipp, danke für Deine Rückfrage!

    Seminarverwaltung: Ein Kunde kann mehrere Seminare buchen und eine Seminar kann mehrere Kunden haben.

    Model\Kunde.php

    [code]...

    /**
    * Name
    *
    * @var string
    * @validate NotEmpty
    */
    protected $name = '';

    /**
    * Seminare, die der Kunde gebucht hat
    *
    * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Vendor\Seminarext\Domain\Model\Seminar>
    * @lazy
    */
    protected $seminare = null;
    ...
    [/code]

    \Model\Seminar.php

    [code]...

    /**
    * Name
    *
    * @var string
    * @validate NotEmpty
    */
    protected $name = '';

    ...
    [/code]

    TCA Kunde

    [code]...

    'seminare' => [
    'exclude' => false,
    'label' => 'LLL:EXT:seminarext/Resources/Private/Language/locallang_db.xlf:tx_seminarext_domain_model_kunde.seminare',
    'config' => [
    'type' => 'select',
    'renderType' => 'selectMultipleSideBySide',
    'foreign_table' => 'tx_seminarext_domain_model_seminar',
    'MM' => 'tx_seminarext_kunde_seminar_mm',
    'size' => 10,
    'autoSizeMax' => 30,
    'maxitems' => 9999,
    'multiple' => 0,
    'fieldControl' => [
    'editPopup' => [
    'disabled' => false,
    ],
    'addRecord' => [
    'disabled' => false,
    ],
    'listModule' => [
    'disabled' => true,
    ],
    ],
    ],
    ...
    [/code]

    SQL der _mm-Tabelle

    [code]SQL

    #
    # Table structure for table 'tx_seminarext_kunde_seminar_mm'
    #
    CREATE TABLE tx_seminarext_kunde_seminar_mm (
    uid_local int(11) unsigned DEFAULT '0' NOT NULL,
    uid_foreign int(11) unsigned DEFAULT '0' NOT NULL,
    sorting int(11) unsigned DEFAULT '0' NOT NULL,
    sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL,

    PRIMARY KEY (uid_local,uid_foreign),
    KEY uid_local (uid_local),
    KEY uid_foreign (uid_foreign)
    );
    [/code]

    Diese Intermediate Table wird vom Extension Builder bei m:n-Relationen automatisch erstellt.

    Der Kunde bucht ein Seminar, das mit
    [code]public function addSeminar(\Vendor\Seminarext\Domain\Model\Seminar $seminar)
    {
    $this->seminare->attach($seminar);
    }
    [/code]
    mit dem Kundendatensatz verlinkt wird.

    Ziel ist es nun in der tx_seminarext_kunde_seminar_mm-Tabelle ein Feld zu erstellen ("bezahlt"), das angibt, ob der Kunde die Gebühr für dieses Seminar bezahlt hat. Von der Logik her gehört dieses Attribut zur Relation "Kunde-Seminar" und passt weder zu Kunde noch zu Seminar.
    (Wenn das prinzipiell funktioniert, sollten noch weitere Felder, z.B. das Datum der Zahlung mit rein.)

  • chris_m chris_m
    T3PO
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    13. 03. 2018, 10:21

    Nach weiterer Recherche ist der Ansatz, Informationen in die _mm-Tabelle zu schreiben, nach meinem Verständnis nicht "korrekt" im Sinne des DDD und wird damit nicht richtig von Extbase unterstützt. Daher habe ich die m:n-Beziehung aufgelöst und noch eine Entity "Seminarbuchung" eingeführt, die zwischen Kunde und Seminar steht und die die zusätzlichen Daten enthält.

  • 1