CSqlDataProvider params

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

CSqlDataProvider params

Сообщение Shappy »

В добрый день всем.
Пишу sql запрос для CSqlDataProvider, в конце после WHERE прибавляются условия, например:

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

if($action != NULL) $sql.=" AND advert.action_id=:action";
if($a != NULL) $sql.=" AND advert.object_id=:a";
По сути это реализация поиска, если переменная из запроса пуста, то в условие эта переменная не записывается.
А теперь проблема:

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

$dataProvider=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'params'=>array(":action"=>$action, ":a"=>$a),
            /*'sort'=>array(
                'attributes'=>array(
                    'id'
                ),
            ),*/
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));
В params записываем значения переменных из запроса:

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

":action"=>$action, ":a"=>$a
Но если хоть одна переменная NULL, из params значения не подставляются... Если все параметры ($action и $a) заполнены, то все подставляется как надо в запрос...
Как быть, что делать?:) Подскажите плз, может я вообще не тем путем иду...
Аватара пользователя
anton44eg
Сообщения: 2716
Зарегистрирован: 2012.01.25, 13:37
Откуда: Киев

Re: CSqlDataProvider params

Сообщение anton44eg »

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

$params = array();
if($action != null)
{
    $sql.=" AND advert.action_id=:action";
    $params[':action'] = $action;
}
if($a != null)
{
    $sql.=" AND advert.action_id=:action";
    $params[':action'] = $a;
}
$dataProvider=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'params'=>$params,
            'pagination'=>array(
                'pageSize'=>10,
            ),
        )); 
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: CSqlDataProvider params

Сообщение Shappy »

anton44eg писал(а):

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

$params = array();
if($action != null)
{
    $sql.=" AND advert.action_id=:action";
    $params[':action'] = $action;
}
if($a != null)
{
    $sql.=" AND advert.action_id=:action";
    $params[':action'] = $a;
}
$dataProvider=new CSqlDataProvider($sql, array(
            'totalItemCount'=>$count,
            'params'=>$params,
            'pagination'=>array(
                'pageSize'=>10,
            ),
        ));
Это гениально:)) Спасибо большое...
Ответить