如何修复Grid-> addQuickSearch()+ Field_Callback错误?

时间:2018-06-19 15:18:23

标签: atk4

Field_Callback似乎无法使用Grid-> addQuickSearch()方法。

我有以下模型:

class Country extends \AppAtk4\MyModel {
    public $title_field = 'calc_title';

    public function init() {
        parent::init();
        $this->addField('iso_code', ['type' => 'string', 'required' => true]); // ISO 3166-1 alpha-2
        $this->addField('name', ['type' => 'string', 'required' => true]);

        $this->addExpression('calc_title', ['CONCAT([iso_code], \' - \', [name])', 'type' => 'string', 'read_only' => true, 'ui' => ['visible' => false]]);
    }
}

此代码初始化了带有搜索输入的网格:

    $crud->setModel($model);

    // add quick search
    $searchFields = [];
    foreach ($model->elements as $name => $element) {
        if (!$element instanceof \atk4\data\Field) {
            continue;
        }

        $searchFields[] = $name;
    }
    $crud->addQuickSearch($searchFields);
    $crud->quickSearch->owner->add(new \atk4\ui\FormField\Input(['inputType' => 'Hidden', 'short_name' => 'crud_model', 'content' => get_class($model)]));

然后,当我打开网格时,写一些搜索文本并按Search,将引发以下异常:

atk4\dsql\Exception: DSQL got Exception when executing this query
Exception Parameters
    error: "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'field_sql' in 'where clause'"
    query: "select count(*) from `fromatk4_country` where (`id` like '%s%' or `created_at` like '%s%' or `notes` like '%s%' or `iso_code` like '%s%' or `name` like '%s%' or (CONCAT(`iso_code`, ' - ', `name`)) like '%s%' or `field_sql` like '%s%')"

似乎SQL查询(field_sql)中的列名称错误。我从去年的某个版本升级到atk4 / data 1.3.5时出现了这个问题。

这是错误还是应该/可以不同地初始化搜索字段?

我还在项目存储库中打开了一个问题:https://github.com/atk4/data/issues/329

1 个答案:

答案 0 :(得分:1)

我的猜测是,这个额外的字段是由某些东西添加的。也许您正在使用“ $ grid-> addColumn”。过去,此操作用于为现有字段添加新的装饰器,而现在它会添加不存在的字段。

似乎没有在您的代码中添加它,所以也许还有其他东西。尝试注释掉所有内容,并在没有Grid / CRUD的情况下使用foreach来查看该字段是否仍然存在。