【发布时间】:2014-08-12 22:41:35
【问题描述】:
我有一个像这样的自动完成字段的表单
$f = $this->add('Form');
$f->addField('autocomplete','item')->setValueList($this->api->db->dsql()->table('item')->field('nroitem,concat(nroitem, \'-\',detelle)')->do_getAssoc());
当我测试表单时,自动完成字段的响应非常慢(3-4秒带入表格信息,屏幕被冻结。),当我删除第一个字段做a时也是如此搜索。
concat 是允许按项目编号或项目名称搜索。
这种字段从表中获取的数据大小是否有限制?
我尝试过制作一些索引,但没有成功。 我尝试通过会话变量(setValueList($array) 传递数组,这是我通过对数据库的先前查询获得的)。
谢谢。
【问题讨论】:
-
您使用的是哪个版本的 ATK 和 Autocomplete 插件?您的
item表中有多少条记录?索引不会以任何方式帮助您,因为 SQL 使用 `LIKE '%searchstring%' 类型的比较。 -
并且不要将 setValueList 用于大数组!定义模型并使用 $field->setModel($model) 代替。
-
我使用的是 4.1 pf ATK 版本。我知道有点老了,而且我没有使用模型。我将尝试使用模型。
-
是的,4.1 已经很老了。 4.2 还可以,4.3(很多东西都变了)很快就会发布 :)
-
PHP 比较慢主要是因为解析数组中的所有记录,然后将此数组设置为自动完成字段的数据源。如果有很多记录,则会消耗大量的处理时间和 RAM。
标签: atk4