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
...
/**
* 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;
...
\Model\Seminar.php
...
/**
* Name
*
* @var string
* @validate NotEmpty
*/
protected $name = '';
...
TCA Kunde
...
'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,
],
],
],
...
SQL der _mm-Tabelle
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)
);
Diese Intermediate Table wird vom Extension Builder bei m:n-Relationen automatisch erstellt.
Der Kunde bucht ein Seminar, das mit
public function addSeminar(\Vendor\Seminarext\Domain\Model\Seminar $seminar)
{
$this->seminare->attach($seminar);
}
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.)