Мне нужно создать несколько сложных запросов для расширения TYPO3. Один из этих запросов ищет пользовательскую запись в наборе данного пользователя или в наборе записей по умолчанию. Записи по умолчанию сохраняются с cruser_id = 0
. Для этого необходимо построить вложенные логические операторы.Вложенные запросы с AND и OR в TYPO3/Extbase
Я попробовал его следующим образом:
public function findById($cId, $userId) {
$query = $this->createQuery();
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['pid', 'cruser_id', 'sys_language_uid']);
$res = $query->matching(
$query->logicalAnd(
$query->equals("id", $cId),
$query->logicalOr(
$query->equals("cruser_id", $userId), //include custom entries
$query->equals("cruser_id", 0) //also include default entries
)
))->execute()->getFirst();
print_r($res);
И это не работает :-(я пытался отладить, но я не нашел никаких указаний на ошибки в своем коде Было бы здорово, если бы кто-то. может помочь мне здесь
Для меня ваши ограничения выглядят нормально, за исключением 'setEnableFieldsToBeIgnored (['pid', 'cruser_id', 'sys_language_uid'])' - это не поля enable. Вы проверили запрос, который был построен? –
Я потратил много времени на отладку SQL-запросов, но нашел свою проблему. Прежде чем создавать ограничения, я должен был бы выполнить '$ query-> getQuerySettings() -> setRespectStoragePage (false);', чтобы игнорировать 'pid'. Спасибо за подсказку! – seboettg