Pull to refresh

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

Reading time 2 min
Views 3.5K
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 в контроллере


$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.


image
Источник


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


image


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

Tags:
Hubs:
+4
Comments 0
Comments Leave a comment

Articles