Использование специальных типов данных PostgreSQL в ORM Doctrine

3,158 views

Published on

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
  • Would love to see an English translation of this - very little info on using hstore with Doctrine.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
3,158
On SlideShare
0
From Embeds
0
Number of Embeds
272
Actions
Shares
0
Downloads
18
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide

Использование специальных типов данных PostgreSQL в ORM Doctrine

  1. 1. Использование специальных типов данных PostgreSQL в Александр Коротков, Интаро Doctrine 2 ORM Alexander Korotkov aekorotkov@gmail.com Alexadner Korotkov
  2. 2. Специальные типы данных PostgreSQL в Doctrine ORM Произвольный набор свойств • Товар (e-commerce) • Документ (документооборот, каталоги и т.д.) Alexadner Korotkov
  3. 3. Специальные типы данных PostgreSQL в Doctrine ORM Подходы • Entity-Attribute-Value • Каждое свойство – отдельная колонка • СУБД-специфичные методы Alexadner Korotkov
  4. 4. Специальные типы данных PostgreSQL в Doctrine ORM Entity-Attribute-Value (EAV) 1 * * 1 Entity Value Attribute Alexadner Korotkov
  5. 5. Специальные типы данных PostgreSQL в Doctrine ORM Entity-Attribute-Value (EAV) • Не нужно изменять модель • Сложные запросы • Медленно Alexadner Korotkov
  6. 6. Специальные типы данных PostgreSQL в Doctrine ORM EAV Alexadner Korotkov
  7. 7. Специальные типы данных PostgreSQL в Doctrine ORM Добавление каждого свойства в модель • Запросы работают быстро • Необходимо динамически менять модель • Много столбцов Alexadner Korotkov
  8. 8. Специальные типы данных PostgreSQL в Doctrine ORM Добавление каждого свойства в модель Alexadner Korotkov
  9. 9. Специальные типы данных PostgreSQL в Doctrine ORM PostgreSQL Alexadner Korotkov
  10. 10. Специальные типы данных PostgreSQL в Doctrine ORM hstore SQL NoSQL Alexadner Korotkov
  11. 11. Специальные типы данных PostgreSQL в Doctrine ORM hstore в PostgreSQL • Не нужно изменять модель • Прозрачная работа со стороны PHP • Запросы работают быстро • СУБД-зависимое решение Alexadner Korotkov
  12. 12. Специальные типы данных PostgreSQL в Doctrine ORM Объявление в модели /** * @var array $properties * * @ORMColumn(name="properties", type="hstore", nullable=true) */ private $properties; Alexadner Korotkov
  13. 13. Специальные типы данных PostgreSQL в Doctrine ORM Сохранение данных $product = new Product(); $product->setName(‘box’); $product->setProperties(array( w => 80, h => 60 )); $em->persist($product); $em->flush(); Alexadner Korotkov
  14. 14. Специальные типы данных PostgreSQL в Doctrine ORM Прозрачная работа Alexadner Korotkov
  15. 15. Специальные типы данных PostgreSQL в Doctrine ORM Что происходит в базе crm=# select id, name, properties from product; id | name | properties ----+------+---------------------- 1 | box | "h"=>"60", "w"=>"80" (1 row) Alexadner Korotkov
  16. 16. Специальные типы данных PostgreSQL в Doctrine ORM Извлечение из базы $product = $this->getDoctrine() ->getRepository(‘Product) ->find(1); print_r($product->getProperties()); Array ( [h] => 60 [w] => 80 ) Alexadner Korotkov
  17. 17. Специальные типы данных PostgreSQL в Doctrine ORM Функция fetchval: фильтрация $query = $em->createQuery(“ SELECT p FROM Product p WHERE fetchval(p.properties, w) = :value “)->setParameter(value, 80); Alexadner Korotkov
  18. 18. Специальные типы данных PostgreSQL в Doctrine ORM SQL SELECT ... FROM product i0_ WHERE fetchval(i0_.properties, w) = ? Alexadner Korotkov
  19. 19. Специальные типы данных PostgreSQL в Doctrine ORM Функция fetchval: сортировка $query = $em->createQuery(“ SELECT p, fetchval(p.properties, w) AS w FROM Product p ORDER BY w “); Alexadner Korotkov
  20. 20. Специальные типы данных PostgreSQL в Doctrine ORM SQL SELECT ..., fetchval(i0_.properties, w) AS sclr13, ... FROM product i0_ ORDER BY sclr13 ASC Alexadner Korotkov
  21. 21. Специальные типы данных PostgreSQL в Doctrine ORM Операторы >= и <= $query = $em->createQuery(‘ SELECT p FROM Product p WHERE p.properties >= :property ’)->setParameter(property, array(w => 80), hstore); Alexadner Korotkov
  22. 22. Специальные типы данных PostgreSQL в Doctrine ORM Удобно Alexadner Korotkov
  23. 23. Специальные типы данных PostgreSQL в Doctrine ORM Хак ((( CREATE OPERATOR <= ( PROCEDURE = hs_contained, LEFTARG = hstore, RIGHTARG = hstore, COMMUTATOR = >=, RESTRICT = contsel, JOIN = contjoinsel); Alexadner Korotkov
  24. 24. Специальные типы данных PostgreSQL в Doctrine ORM Скорости нннада? Alexadner Korotkov
  25. 25. Специальные типы данных PostgreSQL в Doctrine ORM Index CREATE INDEX i_crm_product_properties_w ON i_crm_product ( fetchval(properties, w) ); Alexadner Korotkov
  26. 26. Специальные типы данных PostgreSQL в Doctrine ORM Index CREATE INDEX i_crm_product_properties ON i_crm_product USING gin (properties); Alexadner Korotkov
  27. 27. Специальные типы данных PostgreSQL в Doctrine ORM Спасибо за внимание! Alexadner Korotkov

×