DbHelp.ru
Маленький Yii блог
Комментарии
Гость: buy cheap brand viagra, brand viagra vs generic viagra brand name viagra 100mg, buy cheap brand vi...
Гость: vegas world free slots games celebrity slots cleopatra slots casino slots | https://freecasinoslots....
Гость: generic brand for viagra, name brand viagra buy cheap brand viagra, brand viagra https://brandvi...
Гость: brand viagra online - generic brand for viagra brand viagra vs generic viagra, name brand viagra ...
Гость: http://yandex.ru/collections/card/5ba403c74f59ff00c3ca55dc/ http://yandex.ru/collections/card/5ba3e...



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Используем функции SQL или заметка про CDbExpression

Рубрика: Мелкие заметки на тему Yii

Оцените эту статью:

Рейтинг: 0.00 (0)
31 Окт. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Если вы хорошо знакомы с языком SQL, то наверняка любите использовать всякие встроенные функции для упрощения жизни. Сегодня мы с вами поговорим о том как легко использовать их в своих yii запросах.

---

Как обычно я просматривал форум в поисках интересных идей для изучения и натолкнулся на этот пост. Автор попросил подсказать ему как использовать DATE_FORMAT в результате выборки.

Если вы захотите просто в select атрибуте указать данную функцию — ничего не выйдет. Yii устроен так, что обводит в кавычки парраметры подставляя их в запрос. Как вы понимаете в кавычках данная функция теряет всю свою силу и воспринимается как обычная строка.

Именно по этому начиная с версии 1.0.2 в Yii был добавлен способ решения данной проблемы. Используя CDbExpression вы можете подставить в запрос любое выражение, которое не будет автоматически экранированно Yii.

Например, вот так работать НЕ будет:

 $criteria = new CDbCriteria();  
$criteria->select = "NOW()"

Yii Framework Blog img http://dbhelp.ruaaaa1Потому что Yii попробует выполнить запрос в котором функция будет представлена как обычная строка:

SELECT "NOW()"

 

Вот так будет правильно:

 $criteria = new CDbCriteria(); 
$criteria->select = new CDbExpression("NOW()");

Yii Framework Blog img http://dbhelp.ruaaaa2 Потому что Yii попробует выполнить функцию не обводя её в кавычки:

SELECT NOW()

 

Пользуйтесь на здоровье! :)



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Вот и порадовали нас новой версией любимого фреймворка. Хотелось бы отметить что на этот раз исправлений ошибок оказалось меньше чем ... "Yii PHP framework 1.0.9"

  2. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 8 : Подключаем дизайн"

  3. Парни из русского сообщества перевели очень важную часть документации - "Использование построителя форм". Это всё нас будет ждать в ... "Перевод справки по форм-билдеру"

[guest] Wra

Было сказано: Суббота, 31 Октябрь 2009

Как это добавить к уже имеющемуся $criteria->select?

[guest] Ekstazi

Было сказано: Воскресенье, 01 Ноябрь 2009

А с вложеными селектами как ? Не проверял ?

[guest] Ekstazi

Было сказано: Воскресенье, 01 Ноябрь 2009

Wra, $criteria->select сам по себе может являться массивом строк.

[adm] zolter

Было сказано: Воскресенье, 01 Ноябрь 2009

Вложенный не проверял но походу дела должен работать. Т.е. если вложенный тупо всунуть через CDbExpression как обычный sql

[guest] Гость

Было сказано: Среда, 18 Ноябрь 2009

А как потом обратиться к результату? Т.е. есть группировка по полю, я выбираю в селект значение какого то поля и экспрешн COUNT(*) AS numResult. В результате формируется корректный запрос, но в результирующией модели $model->numResult ничего не передается (только 0 объявленный как паблик в моделе).

[guest] zolter

Было сказано: Среда, 18 Ноябрь 2009

А покажите весь кусочек кода, где запрос формируете

[guest] Гость

Было сказано: Среда, 18 Ноябрь 2009

Вот кусок портлета сайдбара (вывод тегов):
$criteria=new CDbCriteria;
$tmp[] = 'tagTitle';
$tmp[] = new CDbExpression("COUNT(tagTitle) as numObjects");

$criteria->select = $tmp;
$criteria->group = 'tagTitle';
$criteria->limit = $limit;

$res = Tags::model()->findAll($criteria);

При этом по логам формируется корректный запрос, но в результирующем AR информация об numObjects отсутствует.

[guest] Гость

Было сказано: Среда, 18 Ноябрь 2009

Все заработало…

[guest] zolter

Было сказано: Среда, 18 Ноябрь 2009

гуд! :)

[guest] RSol

Было сказано: Четверг, 19 Ноябрь 2009

Я в одном из приложений сделал:

$criteria=new CDbCriteria;
$criteria->select='MIN(inserttime) as inserttime';

:-)

[guest] Гость

Было сказано: Среда, 07 Апрель 2010

подскажите пожалуйста в чем ошибка


$criteria = new CDbCriteria;
$criteria->select = new CDbExpression("MAX(sort_order) as maximum");
$criteria->condition = 'id_subcat=:id';
$criteria->params = array(':id'=>2);
$max_count = Product::model()->findAll($criteria);

вроде бы ошибки нету, но и нужного результата тоже не получил или может его "достовать" из $max_count нужно по особому?
Вроде бы в коментах выше подобное обсуждалось но почему то решение никто не написал:(

[adm] zolter

Было сказано: Среда, 07 Апрель 2010

Добрый день,
Просто добавьте в модель новый атрибут:

public $maximum;

[guest] Олег

Было сказано: Вторник, 10 Август 2010

А можно ли в именованных групах условий использовать CDbEexpression?
Например вот так не работает:


return array(
'published'=>array(
'condition'=>'a_hidden=0',
),
'coming'=>array(
'condition'=>'a_datetime > '.CDbExpression('NOW()'),
)
);
}

[guest] Доброжелатель

Было сказано: Среда, 11 Август 2010

Наверное надо быть инопланетянином чтобы понять и запомнить все эти ужасы :)

[adm] zolter

Было сказано: Среда, 11 Август 2010

ну не обязательно :))

[guest] Гость

Было сказано: Среда, 01 Август 2018

[url=http://hyip-soft.ru/]создание хайп проекта[/url]

Оставить комментарий


Код:
Имя: