Я включаю панель поиска через AJAX, который передает выбранный фильтр (переключатель), относящийся к столбцу базы данных, и строку поиска для всего, что введено в строку поиска. Код scala/play/anorm, который я использую, таков:
def searchDB(searchString: String, filter: String): List[DatabaseResult] = {
DB.withConnection { implicit c =>
SQL(
"""
SELECT name, email, emailsecondary, picture, linkedin, title, company, companylink, companydesc, location, github, stackoverflow, twitter, blog
FROM mailinglistperson
WHERE {filter} LIKE '%{searchString}%'
""").on(
'filter -> filter,
'searchString -> searchString
).as(databaseResultParser.*)
}
}
Когда я запускаю запрос к базе данных (PostgreSQL), используя psql
, который изоморфен приведенному выше коду анормы, он возвращает 2 результата, то есть:
select id, name, email from mailinglistperson where company like '%kixer%';
Но код anorm возвращает 0 результатов при передаче одних и тех же значений (я проверил значения через println)
РЕДАКТИРОВАТЬ: Когда я переключаю код anorm на использование интерполяции строк, я получаю:
[error] - play.core.server.netty.PlayDefaultUpstreamHandler - Cannot invoke the action
java.lang.RuntimeException: No parameter value for placeholder: 3
РЕДАКТИРОВАТЬ 2: я также попытался передать «%...%» вместе с searchString в LIKE и все равно получил 0 результатов.