Я использую структуру strapi на основе node.js, и при создании построителя запросов я сталкиваюсь с проблемой с предложением andWhere ().
Я реализую функцию поиска, когда пользователь может ввести некоторый текст в поле ввода формы, которое передается, и поля таблицы базы данных запрашиваются на основе этого текста .
В приведенном ниже коде вы Я вижу, что я запрашиваю две вещи:
- Поиск модели продукта везде, где текст присутствует в поле имени.
- И всегда проверяйте и ищите модель продукта везде, где находится поле компании содержит значение, хранящееся в переменной usercompany - предположим, что это « Apple ».
Хорошо, так что в основном у меня несколько ролей пользователя, и я хочу добавить к этому еще одно условие . Я пытаюсь использовать метод точки (.) Для доступа к вложенным отношениям в запросе, но это, похоже, не работает: qb.andWhere('createdby.role', role)
где роль будет значением текущего зарегистрированного пользователя, числовое поле, где каждый идентификатор роли сопоставлен с некоторым строковым значением, таким как «Admin» или чем-то уже в базе данных. Однако это приводит к ошибке, которая не позволяет мне запрашивать вложенные отношения. У меня нет большого опыта работы с книжными полками, поэтому IDK, как решить эту проблему.
Код :
var test = await strapi
.query("product")
.model.query((qb) => {
qb.where(function () {
this.where("name", "LIKE", "%" + searchterm + "%");
});
qb.andWhere("company", usercompany);
qb.andWhere("createdby.role", role); // Here, role = 8
})
.orderBy("updated_at", "desc")
.fetchAll();
Ошибка :
error Error: Undefined binding(s) detected when compiling SELECT. Undefined column(s): [createdby] query: select `product`.* from `product` where (`name`
like ?) and `company` = ? and `createdby` = ? order by `product`.`updated_at` desc
Надеюсь на ответ как можно скорее, спасибо!