[3.0] [GORM] erweitertes GenericCriterionObject

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dave » 13.04.2015, 21:09:00

Hallo mal wieder ;)

ich bin gerade dabei, eine erweiterte Abfrage nach Daten zu erstellen. Dabei verwende ich das GenericCriterionObject.
Für die Zukunft muss ich Daten veschachtelt abfragen (im speziellen geht's dabei um Postleitzahlen - ich muss wissen, zu welchem Bundesland diese gehören).

Nehmen wir folgendes an: ich habe ein Objekt welches aus einem Namen und der PLZ besteht.
Diese Objekt gebe ich nun über das GCO zurück:

Code: Alles auswählen

return $this->orm->loadObjectListByCriterion('Lebensmittelmarkt', $Crit);
Crit wird so erstellt:

Code: Alles auswählen

$Crit = new GenericCriterionObject();
$Crit->addPropertyIndicator('MarktPLZ', 10001, '>=');
$Crit->addPropertyIndicator('MarktPLZ', 14330, '<=');
Damit erhalte ich alle Lebensmittelmärkte im PLZ-Bereich von 10001 bis 14330. Soweit klappt das auch sehr gut. Nun habe ich allerdings das Problem, dass für alle anderen Bundesländer die PLZ-Bereiche über die Bundesländergrenzen hinaus ragen.
Ich muss also meine Daten nach dem Schema abfragen (was durch eine Schleife erfolgt):

Code: Alles auswählen

$Crit->addPropertyIndicator('MarktPLZ', 10001, '>=');
$Crit->addPropertyIndicator('MarktPLZ', 14000, '<=');
$Crit->addPropertyIndicator('MarktPLZ', 14001, '>=');
$Crit->addPropertyIndicator('MarktPLZ', 14330, '<=');
Das entspricht ja auch wieder im Grunde dem Bereich 10001 bis 14330, nur eben diesmal aufgeteilt. Allerdings bekomme ich nichts zurück, der GORM scheint mit dieser Angabe nicht zufrieden zu sein. Was mache ich falsch oder wie muss ich meine Anfrage anpassen? Als setLogicalOperator wird ja von Hause aus AND verwendet, das muss ich also nicht noch ergänzen.

Beste Grüsse :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: [3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dr.e. » 14.04.2015, 18:21:43

Hallo dave,

hast du mal das resultierende Statement angesehen? Vielleicht lässt sich daraus ableiten, was falsch läuft.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dave » 14.04.2015, 19:56:40

dr.e. hat geschrieben:hast du mal das resultierende Statement angesehen? Vielleicht lässt sich daraus ableiten, was falsch läuft.
Ich weiss nicht, wie ich es mir ausgeben lassen kann :? Hab schon diverse Logging-Methoden versucht, führt aber alles nicht zum Ergebnis.
Mein GORM-Config, die ich dann via DIService beziehen, habe ich schon angepasst:

Code: Alles auswählen

conf.debug.method = "setLogStatements"
conf.debug.value = "true"
Trotzdem wird nirgends etwas mitgeschrieben.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: [3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dr.e. » 14.04.2015, 20:54:50

Schau mal unter viewtopic.php?f=5&t=5416&p=19490&hilit=logwriter#p19492, da findest du einen Hinweis zum Setup. Entscheidend ist, dass ein LogWriter registriert ist und DEBUG auch rausgeschrieben wird.

Ich weiß, das ist ein wenig kompliziert, hilft aber die Konfiguration sehr granular steuern zu können. :)
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dave » 15.04.2015, 18:35:57

Hi Christian,

habe es gelöst bekommen. Ich musste mein GenericCriterionObjekt etwas optimieren, damit ein gültiges SQL-Statement erzeugt wird:

Code: Alles auswählen

$Crit = new GenericCriterionObject();
foreach($PLZ as $data) {
   $Crit->addPropertyIndicator('MarktPLZ', $data['min'], '>=');
   $Crit->setLogicalOperator('AND');
   $Crit->addPropertyIndicator('MarktPLZ', $data['max'], '<=');
   $Crit->setLogicalOperator('OR');
} 
Damit klappts nun.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: [3.0] [GORM] erweitertes GenericCriterionObject

Beitrag von dr.e. » 15.04.2015, 19:28:35

Sehr schön! :)
damit ein gültiges SQL-Statement erzeugt wird:
Das kann natürlich passieren, denn der GORM validiert das nicht. In dem Fall - oder wenn du kein Ergebnis bekommst - lohnt sich der Blick ins SQL.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast