[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