В нашем чате часто встречаются вопросы ответы на которые могли бы пригодится и другим. К тому же в 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 в контроллере
$uri = $frameworkBuilder->http()->generateUri('app.some', ['id' => 1]);
Неофициальная поддержка Firebird
Спасибо Linfuby теперь PHPixie Database и ORM также работают с Firebird. Пока она на стадии "секретная фича" и нуждается в тщательной проверке, но уже можно пробовать и помочь искать баги. Для подключения достаточно указать конфиг:
return [ 'default' => [ 'driver' => 'interbase', '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.

https://www.techempower.com/benchmarks/#section=data-r13&hw=ph&test=fortune&l=4fthbz
В Plaintext тесте она обгоняет даже микрофреймворки:

На сегодня это все, в будущем если понравится ждите еще статьей в таком стиле. А если вас заинтересовал сам фреймворк или его компоненты заходите пообщаться к нам в чат.
ссылка на оригинал статьи https://habrahabr.ru/post/317498/
Добавить комментарий