В нашем чате часто встречаются вопросы ответы на которые могли бы пригодится и другим. К тому же в PHPixie есть много интересных фишек которые не попали в документацию так как они слишком специфические. Чтобы вся эта информация не потерялась я начинаю цикл статьей в стиле "tips and tricks" предназначенный в первую очередь для тех кто уже использует фреймворк. И так, начнем.
Оборачивание произвольного запроса в ORM
Иногда надо превратить стандартный SQL запрос в ORM сущности, это довольно просто:
$result = $database->get()->execute('SELECT ....');
$loader = $orm->builder()->loaders()->dataIterator(
$orm->repository('modelName'),
$result
);
//можно использовать как итератор
foreach($loader as $entity) {
//....
}
//или получить массив
$entities = $loader->asArray();
На самом деле таким способом можно получить сущности не только с SQL запроса но и с любого итератора и даже из массива:
$result = new \ArrayIterator([
['id' => 1, 'name' => 'Pixie'],
['id' => 2, 'name' => 'Trixie']
]);
Логирование SQL запросов
Компонент Database поддерживает любой PSR-3 логгер, достаточно передать его в конструктор:
$database = new \PHPixie\Database($config, new SomeLogger());
Если же вы используете фреймворк то логгер можно задать в классе Project\Framework\Builder
:
protected function buildLogger()
{
return new SomeLogger();
}
Запросы будут логированы на уровне DEBUG.
Подгрузка Many-To-Many связей с условием
При прелоуде manyToMany (а скоро и oneToMany) связей можно подгрузить не все сущности а только те которые отвечают условию:
//подгрузить к статьям авторов и те теги у которых установлено поле active = 1
$fairies = $orm->repository('post')->query()->find([
'author',
'tags' => [
'queryCallback' => function($query) {
$query->where('active', 1);
}
]
]);
Шорткат для генерации URL в контроллере
$frameworkBuilder = $builder->frameworkBuilder();
$uri = $frameworkBuilder->http()->generateUri('app.some', ['id' => 1]);
Неофициальная поддержка Firebird
Спасибо Linfuby теперь PHPixie Database и ORM также работают с Firebird. Пока она на стадии "секретная фича" и нуждается в тщательной проверке, но уже можно пробовать и помочь искать баги. Для подключения достаточно указать конфиг:
return [
'default' => [
'driver' => 'interbase',
'database' => 'database',
'host' => 'localhost',
'user' => 'user',
'password' => 'password',
'type' => 'firebird'
]
];
Для продакшена точно рано, но может быть полезно если надо сделать пару запросов или дампнуть базу.
Получение ассоциативного массива сущностей по полю
$items = $orm->query('post')->find()->asArray(false, 'someField');
Новые провайдеры для Social
PHPixie Social теперь поддерживает еще больше провайдеров: Dropbox, Facebook, Github, Google, Instagram, Twitter, Vkontakte (спасибо REZ1DENT3 )
Напоследок новые результаты бенчмарков от Techempower
PHPixie продолжает лидировать по производительности, с еще большим отрывом, уступая разве что Phalcon i микрофреймворкам без ORM.
В Plaintext тесте она обгоняет даже микрофреймворки:
На сегодня это все, в будущем если понравится ждите еще статьей в таком стиле. А если вас заинтересовал сам фреймворк или его компоненты заходите пообщаться к нам в чат.