Zum Inhalt springen

Repository Query auf Eigenschaften übergeordnete Objekte

Erstellt am 21. September 2012 · 5 Antworten · letzte Antwort am 19. Oktober 2012

Tags: Datenbank, Frage

aemka ·

Hi,

ich habe vereinfacht folgende Daten-Struktur: 1 Firma hat n Jobs (im Angebot) Wenn ich nun Jobs im JobRepository abfragen möchte in Form einer Suche nach Job-Titel und Titel der Firma, die den Job eingestellt hat - Wie kann ich den Namen der Firma ausgehend vom Job mit in die Query einbeziehen? Also wie kann ich auf Eigenschaften übergeordnete Objekte zugreifen? Nur per Custom SQL?

...
$query = $this->createQuery();
return $query
	->matching(
		$query->logicalOr(
			$query->like('title', '%' . $value . '%') //,
			// @todo: how can we do the following.
			// $query->like('parentobject.company.title', '%' . $value . '%')
		); 
	)
	->setOrderings($this->defaultSorting)
	->execute();
...
aemka ·

Danke - sicher mal gut zu gebruachen, aber da hier 1 Company n Jobs hat, gibt es erst mal keine mm-Tabelle. Aber zur Not baue ich das halt zu mm um, auch wenn es ansonsten keinen großen Sinn macht.
Hatte gehofft es gäbe einen "offiziellen" Weg dafür.

bberger ·

Stehe genau vor dem gleichen Problem. Normalerweise würde ich mir ja den Parent dazu joinen, aber keine Ahnung wie das mit extbase gehen soll..

Eine mm-Relation kommt nicht in Frage!

Wäre für jeden Tipp dankbar!

Avalarion ·

Auch wenn das eine eklige Lösung ist, sie ist möglich und daher sollte sie auch nicht unbekannt bleiben:

public function findHiddenById($entry){
            $query = $this->createQuery();
            $query->statement('SELECT * FROM tx_ABC_domain_model_DEF WHERE uid = '.intval($entry).' LIMIT 1;');
            return $query->execute()->getFirst();
        }

Also könnt ihr in den Statements natürlich auch JOINen^^. Ist nen doofes Beispiel, hab leider grade kein gejointes.

Gruß

Bastian

kainobi ·
bberger schrieb

Stehe genau vor dem gleichen Problem. Normalerweise würde ich mir ja den Parent dazu joinen, aber keine Ahnung wie das mit extbase gehen soll..

Eine mm-Relation kommt nicht in Frage!

Wäre für jeden Tipp dankbar!

Bin mir nicht sicher ob ich Dich richtig verstehe... du hast zwar im Parent einen Getter/Property für die Children, aber in den Children keinen Getter/Property für das Parent, richtig? Weil dann könntest Du es auch mit einer Extbase-Query wie z.B. $query->like('parent.title', '%' . $value . '%') abfragen (Extbase macht dann den Join für Dich).

Das fehlende Property kannst Du Dir ohne weiteres von Hand im Children-TCA bzw. -Model anlegen. Im TCA muss das Feld halt einfach "in die andere Richtung zeigen". Das geht sowohl für many-to-many als auch one-to-many Beziehungen. Hilft Dir das weiter?