Mittlerweile bin ich etwas weiter (wäre aber dennoch schön, wenn erfahrenere Leute mit helfen könnten :-))
Ich hab mir die ObjectStorage Klasse von extbase mal zur Brust genommen und die Methode Tx_Extbase_Persistence_ObjectStorage::contains() gefunden. Damit hab ich es nun hingekriegt, meine Car Objekte nach der übergebenen Category zu filtern
CarRepository.php:
<?php
/**
* Finds Cars of a specific Category
*
* @param Tx_MyExt_Domain_Model_Category $category
*
* @return Tx_MyExt_Domain_Model_Car
*/
public function findByCategory($category) {
$cars = $this->findAll();
foreach($cars as $key => $val) {
if(!$val->getCategories()->contains($category)) {
unset($discounts[$key]);
}
}
return $cars;
}
?>
In der CarController Klasse wird die Repository-Funktion wie folgt aufgerufen:
CarController.php:
<?php
/**
* List all cars
*
* @param Tx_MyExt_Domain_Model_Category $category
*
* @return string The rendered HTML string
*/
public function listAction($category=NULL) {
$allCars = $this->carRepository->findAll();
if($category!==NULL) {
$allCars = $this->carRepository->findByCategory($category);
}
}
?>
Der aufmerksame Leser wird erkennen, dass ich die @param Annotation des Parameters $category verändert habe. In dem oberen Beitrag hab ich ja geschrieben, dass ich durch die @param Annotation im oberen Beitrag lediglich die UID der Kategorie erhalten habe. Für die Funktion "contains()" brauch ich jedoch das gesamte Object. Wieso ich nur die UID erhalten habe weiß ich bisher noch nicht. Vielleicht kann mir das einer erklären? 🙂
Das funktioniert nun so wie ich es möchte.
Jedoch hab ich dazu einige Fragen:
- Ist das der "richtige Weg" um mit MM Relationen umzugehen?
- Muss ich überhaupt darauf achten, dass ich es mit einer solchen Relation zwischen zwei Objekten zu tun habe oder übernimmt das das Data Mapping für mich und ich kann hier nach Herzenslust mit den Objekten hantieren?
- Wenn ich einen Datensatz der Klasse "Car" im Backend lösche, dann bleibt der Eintrag in der MM-Tabelle zwischen Car und Category bestehen? Wieso wird das nicht automatisch mitgelöscht?