cakephp-datatables icon indicating copy to clipboard operation
cakephp-datatables copied to clipboard

Search error with column type text.

Open wash34000 opened this issue 4 years ago • 2 comments

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 avatar Jun 08 '21 09:06 wash34000

For now i've change line 300 :

$columnType = ($columnDesc['type'] === 'text') ? 'string' : $columnDesc['type'];

wash34000 avatar Jun 08 '21 09:06 wash34000

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!

ypnos avatar Jun 09 '21 18:06 ypnos