18. 04. 2019, 09:54

Hallo,

ich habe eine Filterung für mein Object geschrieben. passt auch alles soweit.
Nun wollte ich gerne den Filter erweitern, so dass in in einem Child-Object eines Child-Objectes nach der uid filtern kann. Dazu mache ich folgendes:

im Controller:

[code]$kostentraegers = $this->kostentraegerRepository->findAll();
$bundeslandoptions = $this->bundeslandRepository->findSorted();

$filter = $this->request->getArguments();

$bundeslandfilter = $filter[filtervt][bundeslandoption];
$kostentraegerfilter = $filter[filtervt][kostentraeger];

if ($bundeslandfilter =='') {$bundeslandfilter = NULL;}
if ($kostentraegerfilter =='') {$kostentraegerfilter = NULL;}

$bundeslands = $this->bundeslandRepository->findDemanded($bundeslandfilter, $kostentraegerfilter);

$this->view->assign('bundeslandfilter', $bundeslandfilter);
$this->view->assign('kostentraegerfilter', $kostentraegerfilter);
$this->view->assign('kostentraegers', $kostentraegers);
$this->view->assign('bundeslandoptions', $bundeslandoptions);
$this->view->assign('bundeslands', $bundeslands);
[/code]

Ich zeige in der View alle Einträge(hier sind es Verträge) eines Bundeslandes sortiert nach Bundesländern an. Habe dann selectboxen zum filtern, so dass ich einmal nur ein einzelnes Bundesland mit den Einträgen anzeigen kann. Die Einträge sind eine MM-Relation. Das Filtern nach Budnesländern klappt wunderbar.

Mein Repository:
[code]/**
* @param string $bundeslandfilter
* @param string $kostentraegerfilter
*/
public function findDemanded($bundeslandfilter, $kostentraegerfilter)
{
$query = $this->createQuery();
$constraints = [];

if ($bundeslandfilter == NULL && $kostentraegerfilter == NULL) {
$query->setOrderings($this->createOrdering());
$result = $query->execute();
} else {
if ($bundeslandfilter !== NULL) {
$constraints[] = $query->equals('uid', $bundeslandfilter);
}
if ($kostentraegerfilter !== NULL) {
$constraints[] = $query->equals('vertrag.kostentraeger.uid', $kostentraegerfilter);
}

$query->setOrderings($this->createOrdering());
$result = $query->matching($query->logicalAnd($constraints))->execute();
}
return $result;
}
[/code]

Über
[code]$constraints[] = $query->equals('uid', $bundeslandfilter);[/code]
kann ich wunderbar nach den Bundesländern filtern.

Jetzt ist es so, dass jedes Bundesland ein ObjectStorage names "Vertrag hat", welche dann wiederum ein ObjectStorage names Kostenträger hat.

Jetzt kann ich zwar theoretisch die Verträge filtern nach z.B. uid/ oder name, wenn ich folgendes abfrage:

[code]$constraints[] = $query->equals('vertrag.name', $kostentraegerfilter);
[/code]

das würde gehen (nehmen wir da mal an, $kostentraegerfilter würde einen namen beinhalten).

jetzt über gebe ich aber in dem Filter $kostentraegerfilter die id eines kostenrägers z.B. 6
ich dachte, dass man dann einfach so nach den entsprechenden Verträgen filtern könnte:
[code]$constraints[] = $query->equals('vertrag.kostentraeger.uid', $kostentraegerfilter);
[/code]

jedoch hat dies keine Auswirkung. Es werden immer alle Verträge eines Bundeslandes angezeigt. Es cheint, als ob man in die dritte ebene nicht filter kann?

Wie könnte man denn ein Filter erstellen, der innerhalb "Bundesländer" alle "Verträge" mit den "Kostenträger X" ausgibt?

Besten Dank.