2017-08-25 7 views
0

TL; DR: Wie kann ich getQuerySettings() -> setEnableFieldsToBeIgnored() verwenden, um an einer Relation anstelle der "Basis" -Tabelle zu arbeiten? Array ('fe_users.disable') funktioniert nicht.TYPO3 Extbase: Abfragegenerator mit setEnableFieldsToBeIgnored

Ich habe ein DB-Modell namens "Parks", die drei Felder hat: "Führer", "Administrator" und "Partner". Alle sind optionale Joins in der Tabelle fe_user.

Jetzt möchte ich eine Repository-Methode erstellen, die einen Park holt, wo ein gegebenes fe_user entweder Führer, Administrator oder Partner ist. Dies funktioniert wie:

$query = $this->createQuery(); 
$where[] = $query->equals('parkusersLeader.uid', $userUid); 
$where[] = $query->equals('parkusersAdministrators.uid', $userUid); 
$where[] = $query->equals('parkusersPartner.uid', $userUid); 
$query->matching($query->logicalOr($where)); 

Dies schafft tatsächlich eine SQL-Abfrage, wo ein JOIN wird für jede der MM-Tabellen in dem „fe_users“ Tisch gemacht, aber ein WHERE-Anweisung wird für jede der fe_users aktiviert Tabelle beitritt, Hinzufügen eines "fe_users.disable = 0" zu ihm. Sobald also einem Park mehrere Benutzer zugewiesen sind und einer der darin zugewiesenen Benutzer deaktiviert ist, schlägt die gesamte Abfrage fehl und gibt den Park nicht zurück.

Also wie kann ich die Methode setEnableFieldsToBeIgnored() verwenden, um extbase nicht die "disable" -Klausel für einen fe_user-Join an dieser Stelle anzufügen? Ich habe versucht:

$query->getQuerySettings()->setEnableFieldsToBeIgnored(array('parkusersLeader.disable', 'parkusersLeader.disabled', 'fe_users.disabled', 'fe_users.disable', 'disabled', 'starttime')); 

Keiner von denen scheint die SQL-Abfrage überhaupt zu ändern.

Antwort

0

Sie müssen die Option aktivieren, um die Deaktivierungsfelder explizit zu ignorieren.

Haben Sie versucht, in allen Datensätzen, die disabled-Attribut ignorieren sollte die folgenden für Ihre Anfrage

$query->getQuerySettings()->setIgnoreEnableFields(true); 
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['disable']); 

(Diese Einstellung es möglich sein könnte präziser in der Felddefinition zu sein -.. Nach Ihrem Beispiel Sie könnte diese auch global für das Repository festlegen.)

Verwandte Themen