TYPO3 Extbase Repository Query: Wie Sie Datensätze suchen in M:N-Beziehung, wo mehrere Werte für N sind gegeben?

Haben wir ein einfaches Modell Unternehmen. Jedes Unternehmen kann eine oder mehrere Abteilungen Dept. Jede Abteilung wird von einem bestimmten Typ Typ.

Nun müssen wir eine Abfrage, wo alle Firmen zurückgegeben, die eine Abteilung des Typs X und eine vom Typ Y mindestens ein (d.h. jedes zurückgegebene Gesellschaft hat zwei oder mehr Abteilungen, mindestens ein X und ein Y).

Wie geht das mit einer Abfrage?

Diese Abfrage liefert keine Ergebnisse, wenn getTypes gibt mehr als einen Typ.

if (count($types = $demand->getTypes()) > 0) {
    foreach ($types as $type)
        $constraints[] = $query->contains('dept.type', $type);
}

$result = $query->matching($query->logicalAnd($query->logicalAnd($constraints)))->execute();

Diese Abfrage gibt Ergebnisse für Typ X oder Y

if (count($types = $demand->getTypes()) > 0) {
    $constraints[] = $query->in('dept.type', $types);
}

Den Tabellen sieht wie folgt aus (vereinfacht):

CREATE TABLE IF NOT EXISTS `company` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  PRIMARY KEY (`uid`)
);

CREATE TABLE IF NOT EXISTS `dept` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `company` int(10) unsigned NOT NULL,
  `type` int(10) unsigned NOT NULL,
  PRIMARY KEY (`uid`)
);

CREATE TABLE IF NOT EXISTS `type` (
  `uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  PRIMARY KEY (`uid`)
);
  • Ich konnte das dann natürlich führen Sie eine Abfrage für jede Art und dann nehmen die sich kreuzenden gesetzt... aber das ist nicht sehr elegant!
  • Das Feld "Typ" in der Tabelle "dept" ist ein unsigned int(10). Wie kann es mehr als eine Beziehung? Ich weiß, das Komma sepearted Zuordnung, das erfordert aber einen string. Ich kenne auch die 1:n, aber das muss ein extra Feld in der Tabelle geben und nicht sinnvoll-und eine M:N-Beziehung benötigt und extra Tabelle. Überprüfen Sie Ihre TCA-und backend-Einstellung, wenn alles funktioniert es.
  • Jede Abteilung hat nur eine Art, also eine einzelne int-Feld ist in Ordnung. Aber ein Unternehmen hat eine oder mehrere Abteilungen. In diesem Sinne, die Tabelle department wird der mn-Tabelle--- Alle Beziehungen in diesem Modell sind in Ordnung. Es geht nur darum, eine query Lösung.
InformationsquelleAutor rantanplan | 2013-04-02
Schreibe einen Kommentar