Hallo,
ich habe wieder mal ein Problem mit den Contenido Klassen.
Ausgangssituation:
Tabelle Kategorie, Lookup und Adressen. Lookup verknüpft über die IDs der Kategorien und Adressen beide miteinander.
Zu den Tabellen existieren jeweils Klassen, welche von Item und ItemCollection erben.
Mein Problem:
Ich benötige alle Adressen einer Kategorie sortiert nach einer Eigenschaft aus der Adressentabelle. Ohne diese Sortierung ist es kein Problem. Auch ein anschließendes Sortieren des unsortierten Ergebnisses wäre möglich. Ich möchte aber die Möglichkeit des verlinken, joinen mit der Methode link aus der Klasse ItemCollection nutzen. Dies ist auch bei include.frontend.left_top.php genutzt. Nur leider gelingt es mir nicht dies auf mein Zweck anzuwenden.
Ich hoffe, ich habe es ausreichend beschrieben und es gibt hier jemanden der dies schon mal erfolgreich angewendet hat und mir einen Tipp geben könnte.
Vielen Dank!
4.8.12 Joins bei ItemCollections
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Re: 4.8.12 Joins bei ItemCollections
Ich würde sagen, so in der Art:
Die jeweiligen Item-Klassen muss man sich denken. Ist aber schon ein paar Tage her, dass ich mich mit der GenericDB herumgequält habe. 
Es wäre ganz gut, wenn du dein Zwischenergebnis dann mal hier postest. Dann ist es evtl. etwas einfacher, dir da konkret zu helfen.
Code: Alles auswählen
/**
* Linkende Klasse
*/
class LinkendeKlasseCollection extends ItemCollection {
/**
* Constructor Function
* @param none
*/
function LinkendeKlasseCollection() {
global $cfg;
parent::ItemCollection($cfg["tab"]["linkendeklassetabelle"], "id");
$this->_setItemClass("LinkendeKlasseItem");
}
/**
* Tu was
*/
function tuwas (array $typen) {
$this->link("VerlinkteKlasseCollection");
$this->addResultField("verlinkteklassecollection.name");
$this->addResultField("verlinkteklassecollection.reihenfolge");
$this->setWhere("verlinkteklassecollection.typ", $typen, "IN");
$this->setOrder("verlinkteklassecollection.reihenfolge ASC");
$this->query();
}
}
/**
* Verlinkte Klasse
*/
class VerlinkteKlasseCollection extends ItemCollection {
/**
* Constructor Function
* @param none
*/
function VerlinkteKlasseCollection() {
global $cfg;
parent::ItemCollection($cfg["tab"]["verlinkteklassetabelle"], "ide");
$this->_setJoinPartner("LinkendeKlasseCollection");
$this->_setItemClass("VerlinkteKlasseItem");
}
}

Es wäre ganz gut, wenn du dein Zwischenergebnis dann mal hier postest. Dann ist es evtl. etwas einfacher, dir da konkret zu helfen.
Re: 4.8.12 Joins bei ItemCollections
Hallo Dodger77,
soweit begriffen. Allerdings wenn ich dann das Ergebniss mir anschaue finde ich nicht das passende Ergebnis.
Ich habe deine tuwas mal erweitert:
Leider finde ich im Ergebniss (also in den $oItems) keine Felder aus der anderen Tabelle. Muss ich das anders machen? Genauso konnte ich bisher keine Sortierung feststellen. Wie wird eigentlich der Join realisiert? Muss ich noch eine Verknüpfung der beiden Tabellen per WHERE Klausel einfügen, also Tab1.id = Tab2.id??
Wenn es richitg funktioniert werde ich meine Erkenntnisse ins Wiki eintragen.
Vielen Dank!
soweit begriffen. Allerdings wenn ich dann das Ergebniss mir anschaue finde ich nicht das passende Ergebnis.
Ich habe deine tuwas mal erweitert:
Code: Alles auswählen
function tuwas (array $typen) {
$this->link("VerlinkteKlasseCollection");
$this->addResultField("verlinkteklassecollection.name");
$this->addResultField("verlinkteklassecollection.reihenfolge");
$this->setWhere("verlinkteklassecollection.typ", $typen, "IN");
$this->setOrder("verlinkteklassecollection.reihenfolge ASC");
$this->query();
while($oItem = $this->next()) {
var_dump($oItem);
}
}
Wenn es richitg funktioniert werde ich meine Erkenntnisse ins Wiki eintragen.
Vielen Dank!
-
- Beiträge: 3626
- Registriert: Di 12. Okt 2004, 20:00
- Wohnort: Voerde (Niederrhein)
- Kontaktdaten:
Re: 4.8.12 Joins bei ItemCollections
Wie schon geschrieben, mit konkretem Code ist das einfacher zu beurteilen.
Ansonsten kann ich nur den Rat geben nach dem Query mit:
mal anzeigen zu lassen, was genau auf die Datenbank abgesetzt wird.
Probier auch mal statt
folgendes
und schau, was dabei heraus kommt.
Ansonsten kann ich nur den Rat geben nach dem Query mit:
Code: Alles auswählen
echo '<pre>' . $this->_lastSQL . '</pre>';
Probier auch mal statt
Code: Alles auswählen
while($oItem = $this->next()) {
var_dump($oItem);
}
Code: Alles auswählen
if ($this->db->next_record()) {
$oResult = $this->db->getResultObject();
var_dump($oResult);
}