Hallo,
ich möchte gerne Datensätze meiner Extension mit den Datensätzen einer anderen Extensionverknüpfen.
Bsp.
Es gibt bereits eine Extension Schule. Dort sind Daten wie Adressen, Schulleiter, Anzahl der Schüler usw gespeichert.
Jetzt hab ich ne 2. Extension Lehrer. Diese Lehrer will ich jetzt jeweils einer Schule zuordnen.
Ich hab das ganze mit dem Extensionbuilder gestartet und dachte ich könnte das irgendwie unter dem Punkte Relations-> Relation to external Class bewerkstelligen.
Kriegs aber nicht hin....
Ich möchte nachher einfach bei der Eingabe der Daten der Lehrer über ein select Feld die Schule auswählen können.
Geht das?
Wie?
Danke!!!!
:-)
Moin,
ich bin mir nicht sicher, ob der Extension Builder das mit eigenen Klassen schon hinbekommt. Falls ja, prüfe mal ob deine Klassenbezeichnung auch richtig ist. \Vendor\Extension\Domain\Model\Klasse müsste hinkommen.
Wenn das nicht klappt, musst du die Relation händisch anpassen. Dazu benötigst du in deinem Model die entsprechenden Attribute unter Annotation deiner Klassen-Namen ( Schule ) und eine TCA-Konfiguration für dein Model (Lehrer) der entsprechenden Felder, in der drinsteht, aus welchen Objekten du an dieser Stelle auswählen kannst.
Je nachdem, ob du es brauchst, müsstest du noch einen Relation-Table anlegen, um die Zuordnungen zu speichern.
ich dachte das wäre die Lösung. also ne Relation zu einer neuen Datenbank die dann wiederum beim "map to existing table" die fremde Tabelle eingetragen hat:
http://docs.typo3.org/typo3cms/extensions/extension_builder/Developer/ExtendingModels.html
in dem Besipiel sieh das ja so aus als könne man dann dort die in tt_address hinterlegten Adressen auswählen,
genau so möchte ich's haben, nur mit meiner extension/tabelle...also die Schulen
bei mir sieht das frontend Formular allerdings so aus, dass ich einen komplett neuen Datensatz anlegen kann. Siehe ScreenshotBild: schickhardt.org/…/img2.png
Ich will doch nur ein Dropdownmenu haben!!!
Danke!
Moin,
In deinem Link geht es um Extending Models. Das möchtest du aber an dieser Stelle gar nicht 😉
Du hast es jetzt, wie du es haben willst. Du musst nur noch die TCA Konfiguration deiner Schule so anpassen, dass du dort bestehende Schulen auswählen kannst. Dafür müssen dann aber vorher auch Schulen angelegt sein.
Der Typ von deinem TCA für Schule dürfte aktuell inline sein. Wenn du hier mal select probierst, dürfte das schon eher so aussehen, wie du es brauchst 😉
hmmm....ich geb zu ich hab das nich 100% durchstiegen, allerdings geht's in meinem link wirklich nur um "Extending Models"
Die Überschrift (wenn ich ein Stückchen weiter runter Scroll) lautet doch:"Mapping to Tables".
Ich dachte genau das will ich auch🙂
Den Typ hab ich bereits geändert.
Funktioniert im Feld Schule nicht. Das habe ich allerdings über die zusätzliche Tabelle Schule und "Map to Existing Table" (so wie in der Anleitung) gemacht. Vielleicht ist da noch ein Denkfehler....
Wenn ich eins meiner anderen Eigenschaften meiner Klasse/Tabelle im TCA ändere, also aus nem "input" ein "select" mach und dann die "foreign_table" noch ins Spiel bringe, dann klappt das so wie ich das will schon mal mit der tt_address.
'musikinstrument' => array(
'exclude' => 1,
'label' => 'LLL:EXT:feuserextend2/Resources/Private/Language/locallang_db.xlf:tx_feuserextend2_domain_model_feuserext2.musikinstrument',
'config' => array(
'type' => 'select',
'foreign_table' => 'tt_address',
'minitems' => 0,
'maxitems' => 1,
'appearance' => array(
'collapseAll' => 0,
'levelLinksPosition' => 'top',
'showSynchronizationLink' => 1,
'showPossibleLocalizationRecords' => 1,
'showAllLocalizationLink' => 1
),
),
),
Ich komm der Sache schon näher, würde aber trotzdem gerne wissen was der "Mapping to tables" Teil im ExtensionBuilder Tutorial macht.
Danke!
Ergänzung,
'foreign_table' => 'tx_schuledb_domain_model_schulen',
(tx_schuledb_domain_model_schulen das ist meine externe Klasse)
funktioniert auch,
würde aber trotzdem immernoch gerne wissen was im "Mapping to tables" Teil des ExtensionBuilder Tutorial beschrieben wird.😃
Mapping to tables kannst du unter anderem Nutzen, wenn du Beispielsweise Klassen extendest. Beispielsweise
Class Fahrzeug
Class Auto extends Fahrzeug
Class Motorrad extends Fahrzeug
In diesem Fall könntest du deine Klassen Auto und Motorrad in einer einzelnen tabelle, nämlich domain_model_fahrzeug speichern. Dafür benötigst du dann unter anderem auch das Map to tables, was dadurch natürlich im Bereich Extending Models angesprochen wird 😉
Oder du möchtest in deiner Extension z.B. ein Model Address nutzen und dann deine daten in der Tabelle tt_address speichern.
In deinem Fall hast du ja nur ein Objekt Schule.
Objekt Schule gehört zur Tabelle domain_model_schule, da brauchst du nichts extenden. Es sei denn, du willst in der tt_address deine Schulen speichern, das ist dann aber nicht mehr deine Frage aus dem ersten Post 😉
erst mal vielen Dank für deine Antwort,
ok, jetzt dämmerts so langsam,
mir war der Unterschied zwischen Extending und Mapping einer Klasse nicht ganz klar, bzw. wie das Zusammenhängt.
Beim Extending erweitere ich also eine bestehende Klasse um z.b ein Feld erweitern will,
Beim Mappen speicher ich also meine Klasse in einem erweiterten Feld der externen Klasse...
Genau, das will ich auch nicht,
Aber so wie ich das sehe komme ich mit 'type' => 'select' und foreign_table => 'tx_meine_extension_tabelle' hin.
also Danke nochmal und bis zum nächsten Problem!