Zum Inhalt springen

Repository query->matching Verschachtelung

Erstellt am 19. September 2012 · 3 Antworten · letzte Antwort am 20. September 2012

Tags: Frage

kjuuze ·

Hallo zusammen

Ich habe ein Problem im Repository, welchem ich einfach nicht auf den Grund komme. Ich habe zwei Werte (werden später noch mehr), nach welchen in Filtern will. Mit nur einem Wert funktioniert das Filtern bestens. Ich möchte jedoch beide Werte so verknüpfen, dass nur noch die Objekte zurückgegeben werden, auf welche beide (oder später alle) Werte zutreffen.

Alleinstehend sieht das bei mir momentan so aus:

public function filterAndSortBy($filter1, $filter2, $ordering) {
  $query = $this->createQuery();
  if(isset($filter1)) {
    $query->matching($query->equals('wert1', $filter1));	
  }
  if(isset($filter2)) {
    $query->matching($query->equals('wert2', $filter2));	
  }
						
  $query->setOrderings($ordering);
  return $query->execute();
}

So wird immer nur "filter2" berücksichtigt. Nun habe ich selbstverständlich die Weiten des Internets befragt und rausgekriegt, dass das wohl irgendwie mit logicalAnd() verschachtelt werden muss. Ich kriegs aber einfach nicht hin, dass beide Filter in "Aktion" treten.

Falls mir jemand helfen kann, wäre mein Tag gerettet ;-)

Grüsse
Markus

LuP ·

Hallo,

probiere es mal wie folgt:

public function filterAndSortBy($filter1=NULL, $filter2=NULL, $ordering) {
    $query = $this->createQuery();

    $filterArr = array('wert1' => $filter1, 'wert2' => $filter2);

    foreach($filterArr as $property => $filter) {
    	if(isset($filter)) {
            $constraintArr[] = $query->equals($property, $filter);
    	}
    }

    $query->setOrderings($ordering);

    return $query->matching($query->logicalAnd($constraintArr))->execute();
}

VG,
LuP

kjuuze ·

Hey, vielen Dank schon mal. Das sieht schon recht vielversprechend aus. Wusste nicht, dass man logicalAnd() ein Array übergeben kann. Aber scheinbar ist das seit Extbase 1.1 möglich. Werde es morgen mal versuchen und über Erfolg oder Misserfolg berichten.

Gruss

kjuuze ·

Funktioniert perfekt so wie LuP das gepostet hat. Das schöne daran: Nicht viel Code und kann um beliebig viele Filterkriterien erweitert werden.

Vielen Dank an LuP!!!