ypnos-web / cakephp-datatables

CakePHP3 Plugin for DataTables plug-in for jQuery
MIT License
27 stars 24 forks source link

Search error with column type text. #85

Open wash34000 opened 3 years ago

wash34000 commented 3 years ago

Hello,

I've a problem with one table column that is a text type in my model. When i try to search i've an error on line 311 in DataTablesComponent.php, PHP cannot set type "text" :

settype(): Invalid type [ROOT/vendor/ypnos-web/cakephp-datatables/src/Controller/Component/DataTablesComponent.php, line 311]

        $columnDesc = $table->getSchema()->getColumn($column);
        $columnType = $columnDesc['type'];
        // wrap value for LIKE and NOT LIKE
        if (strpos(strtolower($comparison), 'like') !== false) {
            $value = $this->getConfig('prefixSearch') ? "{$value}%" : "%{$value}%";

            if ($this->_table->getConnection()->getDriver() instanceof Postgres) {
                if ($columnType !== 'string' && $columnType !== 'text') {
                    $textCast = "::text";
                }
            }
        }
        settype($value, $columnType);
        $condition = ["{$table->getAlias()}.{$column}{$textCast} {$comparison}" => $value];

Can i force my text field to string without modify your controller file ?

Kind regards

wash34000 commented 3 years ago

For now i've change line 300 :

$columnType = ($columnDesc['type'] === 'text') ? 'string' : $columnDesc['type'];
ypnos commented 3 years ago

Instead, add this before line 311:

if ($columnType === 'text') { // convert to PHP type
    $columnType = 'string';
}

Please test it and if it works, do a pull request. Thanks!