我有一个使用Silverstripe CMS构建的网站。
我们经常需要按帐户ID搜索用户。所以我补充道:
private static $searchable_fields = array(
'ID',
...
);
到帐户数据对象。当我们尝试按ID搜索时,您需要首先输入哈希(#),然后输入帐户ID。这似乎是默认行为。
当你开始输入账户ID时,cpu挂起并且需要很长时间才能响应,这使得它毫无意义,因为在响应时,你可以通过其他方式找到账户。它最终会响应并提供与搜索字词匹配的正确帐户。我们的其他搜索字段都不像这样。
有没有更好的方法来实现此过滤器?
答案 0 :(得分:1)
首先,添加哈希(#)不是标准行为,所以肯定会发生奇怪的事情!默认情况下,应始终对ID字段建立索引,但检查数据库是否具有ID的主字段索引。
我假设您正在ModelAdmin
实例中搜索?如果您可以显示一些可能有用的帐户代码。
如果SilverStripe没有自动创建ID
字段及其索引,则某些内容已经出现故障。
如果您使用的是非标准ID字段(不是自动DataObject.ID
字段),则可以使用$indexes
上的DataObject
静态在数据库中创建索引。确保任何搜索的字段都有索引总是一个好主意。
请参见此处: https://docs.silverstripe.org/en/3/developer_guides/model/indexes/
请注意,如果您没有找到问题的原因,它可能会在以后回来咬你。
这两件事('#'和缺失索引)表明您的SilverStripe安装,配置或代码严重错误。祝你好运!