[TYPO3-german] Problem extbase bidirektionale mm Beziehung
Eike Starkmann
starkmann at undkonsorten.com
Fri Mar 8 14:00:26 CET 2013
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]
More information about the TYPO3-german
mailing list