[TYPO3-german] Problem extbase bidirektionale mm Beziehung

Eike Starkmann starkmann at undkonsorten.com
Thu Mar 14 10:48:36 CET 2013


Hallo Stephan,

On 14.03.2013 01:31, Stephan Schuler wrote:
> 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?
>
Ja habe ich selber geschrieben. Müsste aber trotzdem korrekt sein. Im 
Backend funktioniert ja auch alles und mit "manuellen" Queries kann ich 
die Daten auch anfragen.

> 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.
Jupp, aber so ist es ja auch ;-)
>
> 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.
Da hast du recht. Aber MM_opposite_field ist leider nicht das Problem. 
Ich glaube auch das es im Backend dann nicht funktionieren würde.

Gruß, Eike Starkmann
>
> 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
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>


-- 
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]


More information about the TYPO3-german mailing list