Hallo Typo3 Community,
ich baue gerade eine Extbase Extension, in welcher ich in meiner Haupttabelle eine Relation zu einer Tabelle namens "zipcode" nutze, dort gibt es einen Start und einen End Wert um einen PLZ Bereich zu definieren. Ein Datensatz kann nun mehrere Zipcode Relationen besitzen.
Nun würde ich gerne eine PLZ Suche bauen wo man seine PLZ eingeben kann und geprüft werden soll welche der zipcode Relationen darin liegen.
Muss ich hier einen JOIN Statement bauen? Wenn ja, Wie müsste der aussehen?
Oder gibt es eine andere Möglichkeit?
Vielen Dank für Eure Hilfe
Halion
Wenn dein Model deinen Anforderungen entsprechend konfiguriert ist, dann sollte die Relation bereits vom Repository berücksichtigt werden.
Falls die "zipcode" Tabelle aber gar nicht als Model existiert hast du bereits die 2 wichtigsten Stichworte zu der Lösung genannt: JOIN und STATEMENT.
Mit $query->statement() kannst du manuelle Queries erstellen und bist nicht mehr an das Extbase Model und die Repository-Funktionen gebunden.
SELECT user.* FROM usertable LEFT JOIN zipcode ON (user.X = zipcode.Y) WHERE...
Danke für deine Antwort.
Ich habe mir an der Stelle eine Funktion im Repository erstellt welche mir ein/mehrere Objekt(e) anhand eines Querys zurück gibt.
Vielleicht hilt es ja anderen:
public function deliverFromZiprange($zip) {
//$party = intval($zip);
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(false);
return $query->statement("
SELECT tx_entities_domain_model_party.*
FROM tx_entities_domain_model_party
LEFT JOIN tx_entities_domain_model_zipcoderange
ON tx_entities_domain_model_party.uid = tx_entities_domain_model_zipcoderange.party
WHERE tx_entities_domain_model_zipcoderange.zipcode_start <= {$zip}
AND tx_entities_domain_model_zipcoderange.zipcode_end >= {$zip}
")
->execute();
Funktioniert tadellos!
Der Aufbau eines Joins folgt diesem Aufbau:
SELECT DISTINCT oberobjekt.*
FROM oberobjekt
LEFT JOIN unterobjekt ON oberobjekt.uid=unterobjekt.oberobjekt
WHERE (oberobjekt.title LIKE '%test%' OR unterobjekt.title LIKE '%test%')
AND oberobjekt.deleted=0 AND (...)
AND unterobjekt.deleted=0 AND (...)
Viel Spass!