Копилка знаний для PHPixie — Часть 1

от автора

image

В нашем чате часто встречаются вопросы ответы на которые могли бы пригодится и другим. К тому же в 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.

image
https://www.techempower.com/benchmarks/#section=data-r13&hw=ph&test=fortune&l=4fthbz

В Plaintext тесте она обгоняет даже микрофреймворки:

image

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

ссылка на оригинал статьи https://habrahabr.ru/post/317498/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *