У меня возникли проблемы с динамическим построением предиката с использованием Lovefield. Я имею в виду, что я хочу получить все элементы из таблицы, которые имеют статус = 0 и флаг = 2.
Если пользователь ввел текст для поиска, я также хочу выполнить фильтрацию по этому тексту. (Я хочу сделать это динамически для нескольких других свойств).
Допустим, я держу предикат для переменной и использую его в своем запросе так: db.select().from(myTable).where(pred).exec()
По умолчанию Предикат будет выглядеть так:
var pred = lf.op.and(myTable.Status.eq(0), myTable.Flag.eq(2))
Когда пользователь введет SearchText, я хочу иметь возможность изменить предикат на это:
var pred = lf.op.and(myTable.Status.eq(0), myTable.Flag.eq(2), myTable.SearchableText.eq(userInput));
Поскольку пользователь может выбрать множество фильтров в моем приложении, таких как текст, даты и т. Д. c .. Я хочу иметь возможность строить предикат на основе выбора пользователя.
Я попытался создать и передать массив типа [myTable.Status.eq(0), myTable.Flag.eq(2)]
to lf.op.and (), но он не работает.
[ОБНОВЛЕНИЕ]
В случае, если кто-то столкнется с той же проблемой, мне удалось сделать это работать с этим: https://github.com/google/lovefield/blob/master/demos/olympia_db/angular/demo.js#L342 -L345
В моем случае я сделал это:
var predicates = [myTable.Status.eq(0), myTable.Flag.eq(2)];
if(userInput!=null && userInput.length>0)
predicated.push(myTable.SearchableText.eq(userInput));
var pred = lf.op.and.apply(null, predicates);
db.select().from(myTable).where(pred).exec();