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
 starkm...@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@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an