Hi,
ich bin schon wieder an einem ähnlichen Problem dran.
Um nur kurz auf meinen ersten Beitrag in diesem Thema zurückzukommen, der Fehler lag (aus heutiger Sicht) bei der Query Abfrage mit equals. Ich hätte da schon mit contains arbeiten sollen, dann wäre das Problem gelöst und ich müsste nicht den Umweg über for-Schleifen machen.
Sollte also so funktionieren:
<?php
/**
*
* Returns all objects of this repository with matching category
*
* @param Tx_MyExt_Domain_Model_Category $category
*
* @return Tx_Extbase_Persistence_QueryResult
*/
public function findByCategory(Tx_MyExt_Domain_Model_Category $category) {
$query = $this->createQuery();
$query->matching($query->contains('categories', $category));
$result = $query->execute();
return $result;
}
?>
So, jetzt komm ich zu meinem neuen Problem:
die hier beschriebene Lösung funktioniert, wenn man nur auf eine einzige Beziehung prüft, d.h. $category darf nur ein Domain Model beinhalten. Sobald ich jedoch auf zwei oder mehr Kategorien prüfen möchten, funktioniert das nicht mehr.
Beispielanwendung:
Ich habe mehrere Bilder, welche jeweils mehreren Kategorien zugeordnet sind.
Nun möchte ich alle Bilder ausgeben, welche in Kategorie 1 und in Kategorie 2 sind.
Momentan mache ich das so, dass ich mir über das BildRepository alle Bilder hole und dann jedes einzelne Bild auf Kategoriezugehörigkeit prüfe. Das ist jedoch nicht sehr schön und es muss bestimmt besser gehen.
Das ganze sieht etwa so aus (Bild = Media):
<?php
public function listAction() {
// gewünschte Kategorien holen
$selectedCategories = $this->categoryRepository->findByUids(array(1, 6))->toArray();
// Alle Bilder holen
$medias = $this->mediaRepository->findAll()->toArray();
// Jedes Bild einzeln prüfen
foreach($medias as $key => $media) {
foreach($selectedCategories as $category) {
// Entfernt das Bild sobald mindestens eine Kategorie fehlt
if(!$media->getCategory()->contains($category))
unset($medias[$key]);
}
}
$this->view->assign('categories', $selectedCategories);
$this->view->assign('medias', $medias);
}
?>
Bei mehrerern tausend Bildern kann das ganz schön dauern. Also keine gute Lösung!
Wie kann ich schon im Repository auf mehrere MM-Relationen prüfen?
Danke für eure Hilfe 🙂