Zum Inhalt springen

[DBAL] Mapping auf Value

Erstellt am 24. April 2007 · Noch keine Antworten

Tags: Frage

garbast ·

Da ich momentan viel mit der DBAL kämpfe, würde ich gerne wissen, ob ein Mapping auf Values anstatt auf Fields vorgesehen ist oder nicht. Denn in der Dokumentation finde ich da nix zu.

Zur Zeit habe ich das Problem, dass mehrere Tabellen die ich per DBAL einbinde keine pid haben. Diese versuche ich dadurch einzubinden, in dem ich die pid per Mapping auf einen festen Wert verweise.

Wenn es um die Anzeige in der Listview geht, funktioniert das ganze auch prima. Die Einträge werden alle sauber aufgelistet.

In den jeweiligen Elementen ist mir jedoch folgender unschöne Fehler aufgefallen.

'cpg_categories' => array (
	'mapTableName' => $confArr['cpgPrefix'] . 'categories',
	'mapFieldNames' => array(
		'pid' => 28,
		'uid' => 'cid',
	)
),

'category' => Array (
	'exclude' => 0,
	'label' => 'LLL:EXT:sf_coppermine_bridge/locallang_tca.xml:albums.category',
	'config' => Array (
		'type' => 'select',
		'items' => Array (
			Array ('LLL:EXT:sf_coppermine_bridge/locallang_tca.xml:albums.category.nocat', 0),
		),
		'size' => 1,
		'maxitems' => 1,
		'foreign_table' => 'cpg_categories',
		'foreign_table_where' => 'AND cpg_categories.pid=###STORAGE_PID### ORDER BY cpg_categories.name',
	)
),


0 SELECT cpg_categories.cid, cpg_categories.name
FROM cpg_categories, pages
WHERE
pages.uid = cpg_categories.pid AND pages.deleted = 0 AND 1 = 1 AND cpg_categories.28 = 28
ORDER BY cpg_categories.name
 
1 Unknown column 'cpg_categories.pid' in 'where clause'

Zum einen wird sichtbar, dass pages.uid = cpg_categories.pid nicht richtig in den Wert 28 umgewandelt wird. Dieser Bug ist im Reportsystem schon aufgeführt und resultiert daraus, dass die rechte Seite einer Where Clause nicht korrekt gemappt wird.

Der zweite Fehler fällt bei cpg_categories.28 = 28 auf. Hier wurde auf der Bezeichner pid zwar in 28 umgewandelt, aber das cpg_categories vorangestellt führt trotzdem zu einem Fehler, da es das Feld nicht gibt.

Jetzt stellt sich mir die Frage, ist ein Valuemapping überhaupt zulässig, oder ist die korrekte Anzeige in der Listview nichts weiter als ein Zufallstreffer trotz fehlerhafter Handhabung?