2016-03-03 3 views
0

Я получил сложную структуру данных, как это:Extbase проблема сложного запрос

leve1Model->1:level2Model->n:level3Model->1:value1 
             ->1:level4Model->1:value2 

Что мне нужно, чтобы найти все экземпляры level1Model которые ые level2Model экземпляр содержит одну level3Model экземпляра, который имеет определенное значение 1 и которое'S level4Model экземпляр также имеет определенное значение2.

Я относительно новый для Extbase и это абстракция базы данных, но я полагал, что я мог бы сделать что-то вроде:

$query->contains('level2Model.level3Model.value1', val1), 

, но это дает мне ошибку о неподдерживаемой собственности value1. Но даже если это сработало, я не знаю, как бы я удостоверился, что содержащийся экземпляр также удовлетворяет требуемому состоянию level4Model->1:value2.

Итак, есть ли способ правильно использовать слой абстракции для такого типа запросов (и как я могу это сделать?), Или мне нужно прибегать к простому sql?

ответ

0

Конструктор запросов не поможет вам здесь. Если модель второго уровня хранится в хранилище объектов, вы можете запросить uids этих объектов. Но это до тех пор, пока разработчик запросов возьмет вас. Ваш запрос слишком сложен. Вам придется разделить запрос на несколько частей и повторно фильтровать результаты, но производительность может быть плохой. Я бы предложил использовать вспомогательные функции для санитарии и т. Д., Но передал ему готовые части выражений sql (поля, из, где и т. Д.). В качестве альтернативы вы могли бы переосмыслить структуру данных, это важная часть вашего приложения, чтобы сделать его более гибким.