Группировка условий в запросе ORM Propel (condition, combine)
Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().
На днях передо мной стала задача отсортировать выдачу продуктов по таблице, которая не описана в schema.xml. Приведу краткий пример схемы таблицы и структуры таблицы с позициями, по которой мне следовало отсортировать товары.
Упрощенная таблица товаров (объединил таблицу переводов с основной и урезал поля):
id | (int) | id товара |
name | (string) | Имя |
create_date | (int) | Дата |
Схема этой таблицы (schema.xml):
<table name="shop_products" phpName="SProducts">
<vendor type="mysql">
<parameter name="Charset" value="utf8"/>
</vendor>
<column name="id" type="INTEGER" required="true" autoIncrement="true" primaryKey="true"/>
<column name="name" type="varchar" size="500" required="true"/>
<column name="create_date" type="INTEGER"/>
</table>
Дорпустим у нас есть привязка товаров к статьям, и у каждой статьи может встречаться один и тот же товар и у каждого товара может быть своя позиция в каждой статье.
Приведу пример таблицы статей и связи товаров (назовем таблицу link_page):
page_id | (int) | Id статьи (приведено для примера) |
product_id | (int) | Id товара со схемы SProducts |
position | (int) | Позиция в которой товар есть в статье |
Вот есть позиция у каждого товара в статье, но в таблице товара нет связки, чтобы сделать join пропелом. По этому начинаем делать вот так:
SProductsQuery::create()
->addJoin('shop_products.id' , 'link_page.product_id', Criteria::INNER_JOIN)
->addAsColumn('position', 'link_page.position')
->where('page_link_product.page_id = ' . 'ID страницы товара')
->orderBy('position','ASC')
->find();
В моем случае полный путь к Criteria::INNER_JOIN является \Propel\Runtime\ActiveQuery\Criteria::INNER_JOIN.
SProductsQuery - сгенерированная модель по схеме, упрощенная для понимания и описанная выше.
Данный запрос даст возможность подключить не объявленную в моделях таблица в пропел запрос, чтобы не делать костылей и велосипедов для сортировки.
Пробуйте, разбирайтесь, в моем случае addJoin() позволил сэкономить время переписи и перегенерации схемы под нужды, тем самым не сильно отягощая страницу статьи, на которой присутствуют товары.
Разберем возможность объединения условий в запросе по группам в Propel. Рассмотрим пример фильтрации по полям с помощью ->condition() и ->combine().
Подтянем в наш проект ORM Propel2 с помощью Composer. Рассмотрим смежные пакеты, которые нужны для Propel2.
Рассмотрим вариант создания простого проекта с MVС, который будет откликаться статическую ссылку в браузере, без управления $_GET параметрами. Ссылка будет разбиваться на путь к файлам и задействовать нужные контроллер, модель и view файл.
Иногда возникает нужда использовать фоновый процессы на Php. Рассмотрим пример использования такой возможности в связке Gearman + Php.
Для нормальной работы воркера Gearman требуется постоянная его работа в зацикленном режиме. Со стороны сервера это можно реализовать одним запросом через консоль Cli. Рассмотрим роботу на простом примере.
Разобравшись что такое Compser и для чего он нужен, следует разобраться как его использовать на сайте. В статье рассмотрим подключение библиотек подтянутых через Composer.
Установка MySQL 5.7 через Docker. Все действия будем производить на Ubuntu 14.04 c помощью docker-compose. Рассмотрим запуск, схему для compose и примеры подключения к созданному контейнеру MySQL.
После разработки какого-либо инструмента на PHP, становится вопрос, насколько созданный код ресурсный и какие элементы он затрагивает еще. Рассмотрим установку xhprof, настройку и рассмотрим способы работы с xhprof.