我有两个模型Employee和Unit。单位有很多员工。我正在使用 SearchLogic 搜索员工模型。Searchlogic中以下SQL的等价物是什么
employees.unit_id IN (1,2,3)
我都试过了
unit_id_equals_all[]
unit_id_equals_any[]
但没有任何效果。任何人都可以帮忙吗?
谢谢, 阿比拉什
我有两个模型Employee和Unit。单位有很多员工。我正在使用 SearchLogic 搜索员工模型。Searchlogic中以下SQL的等价物是什么
employees.unit_id IN (1,2,3)
我都试过了
unit_id_equals_all[]
unit_id_equals_any[]
但没有任何效果。任何人都可以帮忙吗?
谢谢, 阿比拉什
Employee.unit_id_equals([1, 2, 3])
这里同样的问题。
我不知道为什么这对我有用,或者为什么我什至尝试过,因为它没有记录。但是我将 _equals 更改为 _in,它生成了带有 IN 的 SQL,并且运行良好。
Employee.unit_id_in([1, 2, 3])
我们在 Rails 2.3.12 项目中遇到了同样的问题。使用 searchlogic 2.4.7,我们可以这样做:
User.id_equals([1,2,3])
升级到搜索逻辑 2.5.8 后(旧版本中的弃用消息使黄瓜和规范输出变得混乱),此语法不再有效。它像上面的一样抛出了这个错误:
ActiveRecord::StatementInvalid: Mysql::Error: Operand should contain 1 column(s): SELECT * FROM `users` WHERE (users.id = 1, 2, 3)
在尝试了上述解决方案后,我们发现这两种语法替代方案有效:
User.id_in([1,2,3]) <-- as suggested above
User.id_equals_any([1,2,3])
换句话说,如果没有“_any”,新的搜索逻辑会产生无效的 mysql。调查何时以及为什么会发生这种变化,我发现了这个提交讨论:
此更改和讨论的结果是,当您想要与数组中的任何值匹配时需要 _any,否则只需将数组直接传递给 equals 语句,而无需根据需要将 SQL 更改为“IN”价值观。
Reverting to 2.4.7 clears the error. Changing all the calls to the more explicit _any or _in is what we ended up doing in order to avoid deprecation errors. Hope this helps and adds to the very helpful answers above.