[TYPO3-german] Problem extbase bidirektionale mm Beziehung
Stephan Schuler
Stephan.Schuler at netlogix.de
Thu Mar 14 01:31:38 CET 2013
Hallo Eike.
Hast du das TCA selbst geschrieben oder hast du es dir erzeugen lassen?
Funktioniert die Zuordnung denn im TYPO3-Backend oder ist die schon dort leer, wenn du die Bearbeitung von der Playlist-Seite bearbeitest?
Wenn deine MM-Tabelle "media_playlist_mm" heißt bedeutet das, dass Media deine Local-Side ist und Playlist deine Foreign-Side.
Laut Dokumentation von MM_opposite_field gehört das ins TCA der Foreign-Side und muss dort den Property-Name der Local-Side benennen.
Demnach muss das MM_opposite_field ins TCA von Playlist, nicht in das von Media.
http://docs.typo3.org/typo3cms/TCAReference/Reference/Columns/Select/Index.html
Leider lässt das aktuelle Dokumentationsformat keine Referenz auf ein Attribut zu.
Und ich hätte als Beispiel nicht unbedingt die Unterscheidung zwischen "a.employees" und "b.employers" verwendet.
Gruß,
Stephan Schuler
Web-Entwickler
Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Website: media.netlogix.de
--
netlogix GmbH & Co. KG
IT-Services | IT-Training | Media
Andernacher Straße 53 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Internet: http://www.netlogix.de
netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Stefan Buchta, Matthias Schmidt
________________________________________
Von: typo3-german-bounces at lists.typo3.org [typo3-german-bounces at lists.typo3.org]" im Auftrag von "Eike Starkmann [starkmann at undkonsorten.com]
Gesendet: Mittwoch, 13. März 2013 17:54
An: German TYPO3 Userlist
Betreff: Re: [TYPO3-german] Problem extbase bidirektionale mm Beziehung
Ich habe dazu mal ein Ticket gemacht, da ich glaube das das Problem in
extbase liegt:
http://forge.typo3.org/issues/46243
Bis denne, Eike
On 08.03.2013 14:00, Eike Starkmann wrote:
>
> Hallo,
> ich habe ein Problem mit einer Extbase Extension die ich gerade schreibe.
> Folgende Situation:
>
> Ich habe ein Objekt Media und ein Objekt Playlist
> Zwischen diesen besteht eine bidirektionale M:M Beziehung.
>
> Ich möchte jetzt zu einem bestimmten Medium (M) alle anderen Medien
> ausgeben, die in der gleichen Playliste (P) sind.
>
> Naive Vorgehensweise (pseudocode):
>
> //alle Playlisten zu dem das Medium gehört
> for M.paylist as playlistItem {
>
> //alle Medien in der aktuellen playliste
> for playlistItem.media as mediaItem{
> ausgabe mediaItem
> }
> }
> Und genau die innere Schleife funktioniert nicht und liefert einen
> SQL-Fehler.
>
> Hier ist der relevante Code:
>
> class Tx_Medialibrary_Domain_Model_Playlist extends
> Tx_Extbase_DomainObject_AbstractEntity {
>
> /**
> * Media of the playlist
> *
> * @var
> Tx_Extbase_Persistence_ObjectStorage<Tx_Medialibrary_Domain_Model_Media>
> * @lazy
> */
> protected $media;
>
> /**
> * Adds a Media
> *
> * @param Tx_Medialibrary_Domain_Model_Media $media
> * @return void
> */
> public function addMedia(Tx_Medialibrary_Domain_Model_Media $media) {
> $this->media->attach($media);
> }
>
> /**
> * Removes a Media
> *
> * @param Tx_Medialibrary_Domain_Model_Media $mediaToRemove The
> Category to be removed
> * @return void
> */
> public function removeMedia(Tx_Medialibrary_Domain_Model_Media
> $mediaToRemove) {
> $this->media->detach($mediaToRemove);
> }
>
> /**
> * Returns the Media
> *
> * @return
> Tx_Extbase_Persistence_ObjectStorage<Tx_Medialibrary_Domain_Model_Media>
> $media
> */
> public function getMedia() {
> return $this->media;
> }
>
> /**
> * Sets the media
> *
> * @param
> Tx_Extbase_Persistence_ObjectStorage<Tx_Medialibrary_Domain_Model_Media>
> $media
> * @return void
> */
> public function setMedia(Tx_Extbase_Persistence_ObjectStorage
> $media) {
> $this->media = $media;
> }
>
> }
>
> TCA:
>
> $TCA['tx_medialibrary_domain_model_playlist'] = array(
> ...
> "media" => Array (
> "exclude" => 1,
> "label" =>
> "LLL:EXT:medialibrary/Resources/Private/Language/locallang_db.xml:tx_medialibrary_domain_model_playlist.media",
>
> "l10n_mode" => "exclude",
> "config" => Array (
> "type" => "group",
> "internal_type" => "db",
> "allowed" =>
> "tx_medialibrary_domain_model_media",
> "size" => 10,
> "minitems" => 0,
> "maxitems" => 100,
> "MM" => "tx_medialibrary_media_playlist_mm",
> "MM_opposite_field" => "media",
> )
> ),
> ...
>
> $TCA['tx_medialibrary_domain_model_media'] = array(
> ...
> "playlist" => Array (
> "exclude" => 1,
> "label" => "playlist",
> "l10n_mode" => "exclude",
> "config" => Array (
> "type" => "select",
> "allowed" =>
> "tx_medialibrary_domain_model_playlist",
> 'foreign_table' =>
> 'tx_medialibrary_domain_model_playlist',
> "size" => 10,
> "minitems" => 0,
> "maxitems" => 100,
> "MM" => "tx_medialibrary_media_playlist_mm",
> )
> ),
> ...
>
> Fluid showAction von Media:
>
> <f:for each="{media.playlist}" as="playlistItem">
> {playlistItem}
> <f:for each="{playlistItem.media}" as="mediaItem">
> {mediaItem}
> </f:for>
> </f:for>
>
> SQL Fehler:
>
> SELECT .* FROM tx_medialibrary_media_playlist_mm LEFT JOIN ON
> tx_medialibrary_media_playlist_mm.uid_local = .uid WHERE
> tx_medialibrary_media_playlist_mm.uid_foreign = '1' AND
> (tx_medialibrary_domain_model_media.type='Tx_Medialibrary_Domain_Model_Media'
> OR
> tx_medialibrary_domain_model_media.type='Tx_Medialibrary_Domain_Model_Media_Video'
> OR
> tx_medialibrary_domain_model_media.type='Tx_Medialibrary_Domain_Model_Media_Audio')
> ORDER BY tx_medialibrary_media_playlist_mm.sorting_foreign ASC
>
>
> Es scheint also so, das bei tx_medialibrary_media_playlist_mm.uid_local
> = .uid Tx_Medialibrary_Domain_Model_Media nicht aufgelöst wird.
>
> Es müsste doch tx_medialibrary_media_playlist_mm.uid_local =
> Tx_Medialibrary_Domain_Model_Media.uid heissen, oder?
>
>
> Ist das jetzt ein Bug ober mache ich hier grundlegend was Falsch?
>
> Bis denne, Eike
>
--
EIKE STARKMANN
starkmann at undkonsorten.com
+49.30.20236354 [fon]
UNDKONSORTEN GBR
Waldemarstr. 38
10999 Berlin
www.undkonsorten.com
+49.30.20236354 [fon]
+49.30.20236354-9 [fax]
thomas alboth, felix althaus + jochen biedermann [gesellschafter]
_______________________________________________
TYPO3-german mailing list
TYPO3-german at lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
More information about the TYPO3-german
mailing list