В рамках нашего расписания регулярных релизов, мы рады сообщить, что Phalcon 2.0.3 был выпущен!
Эта версия содержит множество исправлений, а также новые возможности, основанные на фидбеке сообщества.
Теперь выражения `CASE/WHEN/ELSE` доступны в PHQL:
Если вы используете пространства имен для организации ваших моделей, вы нередко оказывались в ситуации, когда для простой ссылки на модель необходимо набирать длинный namespace. Теперь вы можете добавлять псевдонимы для существующих пространств имен, ускоряя вашу разработку:
Определение псевдонимов в менеджере моделей:
И в запросах:
Эта новая функоциональность поможет вам расширить PHQL с помощью пользовательских функций так как вам необходимо. В следующем примере мы реализуем поддержку MATCH/BINARY из MySQL. Прежде всего вы должны инстанцировать SQL диалект:
Теперь вы можете использовать эту функцию в PHQL и он транслирует ее в правильный SQL:
В Phalcon 2.0.2 были введены подзапросы PHQL. Поддержка этой функции была улучшена в 2.0.3 путем введения оператора EXISTS:
Данная версия может быть установлена из master ветки. Если у вас не установлен Zephir, выполните следующие команды:
Стандартный способ установки также работает:
Если у вас уже установлен Zephir:
Обратите внимание, что при запуске установочный скрипт заменит уже установленную версию Phalcon.
DLL для Windows доступны на странице загрузке.
Смотрите руководство по обновлению, если хотите обновиться до Phalcon 2.0.x с 1.3.x.
Спасибо всем, кто принималь участие в создании этой версии: и контрибьюторам и сообществу за обратную связь!
Эта версия содержит множество исправлений, а также новые возможности, основанные на фидбеке сообщества.
Изменения
- Реализованы псевдонимы для namespace в PHQL
- Возможность определять должен ли виртуальный внешний ключ игнорировать `null`-значения или нет
- Добавлена поддержка `Phalcon\Mvc\Collection` в поведениях (Behaviours)
- Добавлены поведения `SoftDelete` и `Timestampable` в коллекциях
- Исправлена ошибка, добавляющая двойной `?` в `Mvc\Url::get` при использовании параметров #10421
- Строковые атрибуты в моделях теперь имеют опциональную поддержку пустых значений строки #440
- Добавлена возможность возвращать SQL, генерируемый в экземплярах `Mvc\Model\Query` #1908
- Исправление некорректно генерируемого запроса в `Phalcon\Db\Dialect::select()` #10439
- Добавлена поддержка типа Double в MySQL
- `Phalcon\Tag\Select` теперь обрабатывает массив значений строк, избегая принятия нуля за пустую строку #2921
- PHQL теперь поддерживает выражения CASE/WHEN/ELSE #651
- Исправлена ошибка, возникающая при добавлении нестроковых значений в `Phalcon\Crypt::encrypt` из `Phalcon\Http\Cookies`
- Исправлена ошибка непередачи имени схемы (PostgreSQL)
- Атрибут `persistent` был удален из DNS-атрибутов для PDO соединений, в целях избежания ошибок в PostgreSQL #10484
Основные моменты
Поддержка CASE/WHEN/ELSE
Теперь выражения `CASE/WHEN/ELSE` доступны в PHQL:
$robots = $this->modelsManager->executeQuery("
SELECT
CASE r.Type
WHEN 'Mechanical' THEN 1
WHEN 'Virtual' THEN 2
ELSE 3
END
FROM Store\Robots
");
Псевдонимы для Namespace
Если вы используете пространства имен для организации ваших моделей, вы нередко оказывались в ситуации, когда для простой ссылки на модель необходимо набирать длинный namespace. Теперь вы можете добавлять псевдонимы для существующих пространств имен, ускоряя вашу разработку:
// До
$data = $this->modelsManager->executeQuery("
SELECT r.*, rp.*
FROM Store\Backend\Models\Robots AS r
JOIN Store\Backend\Models\RobotsParts AS rp
");
Определение псевдонимов в менеджере моделей:
use Phalcon\Mvc\Model\Manager as ModelsManager;
// ...
$di->set(
'modelsManager',
function() {
$modelsManager = new ModelsManager();
$modelsManager->registerNamespaceAlias(
'bm',
'Store\Backend\Models\Robots'
);
return $modelsManager;
}
);
И в запросах:
// После
$data = $this->modelsManager->executeQuery("
SELECT r.*, rp.*
FROM bm:Robots AS r
JOIN bm:RobotsParts AS rp
");
Функции пользовательского диалекта
Эта новая функоциональность поможет вам расширить PHQL с помощью пользовательских функций так как вам необходимо. В следующем примере мы реализуем поддержку MATCH/BINARY из MySQL. Прежде всего вы должны инстанцировать SQL диалект:
use Phalcon\Db\Dialect\MySQL as SqlDialect;
use Phalcon\Db\Adapter\Pdo\MySQL as Connection;
$dialect = new SqlDialect();
// Register a new function called MATCH_AGAINST
$dialect->registerCustomFunction(
'MATCH_AGAINST',
function($dialect, $expression) {
$arguments = $expression['arguments'];
return sprintf(
" MATCH (%s) AGAINST (%)",
$dialect->getSqlExpression($arguments[0]),
$dialect->getSqlExpression($arguments[1])
);
}
);
// Диалект должен быть передан в конструктор соединения
$connection = new Connection(
[
"host" => "localhost",
"username" => "root",
"password" => "",
"dbname" => "test",
"dialectClass" => $dialect
]
);
Теперь вы можете использовать эту функцию в PHQL и он транслирует ее в правильный SQL:
$phql = "SELECT *
FROM Posts
WHERE MATCH_AGAINST(title, :pattern:)";
$posts = $modelsManager->executeQuery($phql, ['pattern' => $pattern]);
Улучшения в подзапросах
В Phalcon 2.0.2 были введены подзапросы PHQL. Поддержка этой функции была улучшена в 2.0.3 путем введения оператора EXISTS:
$phql = "SELECT c.*
FROM Shop\Cars c
WHERE EXISTS (
SELECT id
FROM Shop\Brands b
WHERE b.id = c.brandId
)";
$cars = $this->modelsManager->executeQuery($phql);
Обновление/Установка
Данная версия может быть установлена из master ветки. Если у вас не установлен Zephir, выполните следующие команды:
git clone http://github.com/phalcon/cphalcon
git checkout master
cd ext
sudo ./install
Стандартный способ установки также работает:
git clone http://github.com/phalcon/cphalcon
git checkout master
cd build
sudo ./install
Если у вас уже установлен Zephir:
git clone http://github.com/phalcon/cphalcon
git checkout master
zephir fullclean
zephir build
Обратите внимание, что при запуске установочный скрипт заменит уже установленную версию Phalcon.
DLL для Windows доступны на странице загрузке.
Смотрите руководство по обновлению, если хотите обновиться до Phalcon 2.0.x с 1.3.x.
- Документация
- API (Спасибо gsouf)
Благодарности
Спасибо всем, кто принималь участие в создании этой версии: и контрибьюторам и сообществу за обратную связь!
Комментарии (4)
PaulMaly
13.06.2015 00:31> новые возможности, основанные на фидбеке сообщества.
Добавьте плиз опциональные параметры в паттерны роутов для Micro Application. Очень не хватает.iGusev Автор
13.06.2015 00:58В микро-роутере есть возможность делать так:
$app->map('/articles[/]?{year:[0-9]*}[/]?{month:[0-9]*}', function($year = null, $month = null) { // ... });
/articles
,/articles/2015
,/articles/2015/05
(Работает и в Phalcon 1)
Речь же об этом идет?
likerRr
Спасибо за новость. Давно слежу за развитием этого фреймворка и с каждым релизом выглядит он все заманчивее