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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение 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
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

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

Сообщение SiZE »

Т.е. тебе даже совет самого Маурицио не помог?!?

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

Для работы с кириллицей возможно тебе надо использовать mb_
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение EVOSandru6 »

Благодарю,


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


помогло!
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение EVOSandru6 »

Только мочему-то если пищещь ГоРбаТоЕСлово, то данное правило не работает(
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение 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');  
Не подскажите , в чем косяк?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

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

Сообщение SiZE »

Сделай

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

echo strtolower($search->name)
у тебя нормально выводится в браузер если написать ГоРбаТоЕСлово?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin »

SiZE писал(а):Сделай

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

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

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

Сообщение Said »

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

$criteria->addSearchCondition('name', $this->name, true, 'AND', 'ILIKE');
это должно работать в postgresql
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение 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);

                 
Подобным.

Первый случай с запросом - работает. С критерий нет(
EVOSandru6
Сообщения: 605
Зарегистрирован: 2014.07.04, 13:33

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

Сообщение EVOSandru6 »

Said писал(а):

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

$criteria->addSearchCondition('name', $this->name, true, 'AND', 'ILIKE');
 
это должно работать в postgresql
Спасибо, но пришлось strtolower -ить
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

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

Сообщение SiZE »

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