Страница 1 из 1

Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 06:43
EVOSandru6
Добрый день,

По умолчанию в гриде регистрозависимый поиск:

Код: Выделить всё

public function search() {
     $criteria->compare('t.name',                $this->name        , true        );
     ...
} 

Пробовал добавлять такие варианты:

Код: Выделить всё

$criteria->addSearchCondition('t.name', '%'.$this->name.'%', false, 'AND', 'ILIKE');
$criteria->addSearchCondition('name', $this->name, true, 'AND', 'ILIKE');
$criteria->compare('LOWER(name)',strtolower($this->name),true);
$criteria->compare('name',         strtoupper($model->name),                 true);
$criteria->compare('name',         strtolower($model->name),                 true);
$criteria->compare('name',         mb_strtoupper($model->name, 'UTF-8'),     true); 

Но тщетно.. В качестве БД - Postgres

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 08:37
SiZE
Т.е. тебе даже совет самого Маурицио не помог?!?

http://www.yiiframework.com/forum/index ... -operator/
http://www.yiiframework.com/forum/index ... d-compare/

Для работы с кириллицей возможно тебе надо использовать mb_

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 08:52
EVOSandru6
Благодарю,


$criteria->compare('LOWER(title)', strtolower($this->title), true);


помогло!

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 14:07
EVOSandru6
Только мочему-то если пищещь ГоРбаТоЕСлово, то данное правило не работает(

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 14:32
zelenin
mb_strtolower

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 14:48
EVOSandru6
zelenin писал(а):mb_strtolower
Почему-то ругается на эту команду, но не в ней дело, ГорБатый нормально ищется. Один момент не ясен. Мне нужно, чтобы из таблицы товаров поиск шел по названию - как Like и жесткий поиск по поставщику (supplier_id), если он указан. Безх него все ищется хорошо.

К сожалению такая конструкция не дает желаемого результата:

Код: Выделить всё

 $criteria->addSearchCondition('LOWER(name)', strtolower($search->name), true, 'AND', 'ILIKE');
if($search->supplier_id)
       $criteria->compare('id',             $search->supplier_id, false, 'AND');  
Не подскажите , в чем косяк?

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 16:28
SiZE
Сделай

Код: Выделить всё

echo strtolower($search->name)
у тебя нормально выводится в браузер если написать ГоРбаТоЕСлово?

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.06.30, 16:31
zelenin
SiZE писал(а):Сделай

Код: Выделить всё

echo strtolower($search->name)
у тебя нормально выводится в браузер если написать ГоРбаТоЕСлово?
http://www.yiiframework.ru/forum/viewto ... 78#p191264

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.07.01, 08:36
Said

Код: Выделить всё

$criteria->addSearchCondition('name', $this->name, true, 'AND', 'ILIKE');
это должно работать в postgresql

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.07.01, 13:24
EVOSandru6
SiZE писал(а):Сделай

Код: Выделить всё

echo strtolower($search->name)
у тебя нормально выводится в браузер если написать ГоРбаТоЕСлово?
Да нормально, с горбатым проблем нет. Проблема в другом - нужно это:

Код: Выделить всё

$sql = "
                select 
                           *
                from 
                            m_products
                where
                            LOWER(name) ILIKE '%".strtolower($search->name)."%'
                and
                            exist = '".ActiveRecord::EXIST_PUBLIC."'
            ";
 if($search->supplier_id)
            $sql                .= " and supplier_id = '".$search->supplier_id."'";
$model              =   Products::model()->findAllBySql($sql);

             
Заменить :

Код: Выделить всё

 $criteria           =   new CDbCriteria();
            $criteria->addSearchCondition('LOWER(name)', strtolower($search->name), true, 'AND', 'ILIKE');
            if($search->supplier_id)
                $criteria->compare('id',             $search->supplier_id, false, 'AND');
// $model              =   Products::model()->published()->findAll($criteria);

                 
Подобным.

Первый случай с запросом - работает. С критерий нет(

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.07.01, 13:25
EVOSandru6
Said писал(а):

Код: Выделить всё

$criteria->addSearchCondition('name', $this->name, true, 'AND', 'ILIKE');
 
это должно работать в postgresql
Спасибо, но пришлось strtolower -ить

Re: Как в Yii1 выстроить регистронезависимый search модели для грида?

Добавлено: 2016.07.01, 13:51
SiZE
zelenin писал(а):
SiZE писал(а):у тебя нормально выводится в браузер если написать ГоРбаТоЕСлово?
http://www.yiiframework.ru/forum/viewto ... 78#p191264
Да мне прост интересно почему он mb_ не пользует. :)