За последние 24 часа нас посетил 30541 программист и 1800 роботов. Сейчас ищут 944 программиста ...

Вы еще пользуетесь ОРМ?

Тема в разделе "Прочее", создана пользователем Simpliest, 10 мар 2010.

?

Вы еще пользуетесь ОРМ?

  1. Да

    0 голосов
    0,0%
  2. Нет

    0 голосов
    0,0%
  3. Хочу себе такое

    0 голосов
    0,0%
  1. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    [sql]SELECT * FROM `bill_of_lading`
    INNER JOIN `bill_of_lading_status` ON `bill_of_lading`.`bill_of_lading_status_id` = `bill_of_lading_status`.`bill_of_lading_status_id`
    INNER JOIN `user` ON `bill_of_lading`.`user_id` = `user`.`user_id`
    INNER JOIN `customer` ON `user`.`customer_id` = `customer`.`customer_id`
    INNER JOIN `customer` AS `customer_2` ON `bill_of_lading`.`bill_of_lading_consignor` = `customer_2`.`customer_id`
    INNER JOIN `customer` AS `customer_3` ON `bill_of_lading`.`bill_of_lading_consignee` = `customer_3`.`customer_id`
    INNER JOIN `customer` AS `customer_4` ON `bill_of_lading`.`bill_of_lading_carrier` = `customer_4`.`customer_id`
    INNER JOIN `offer` ON `bill_of_lading`.`bill_of_lading_offer_carrier` = `offer`.`offer_id`
    INNER JOIN `customer` AS `customer_5` ON `offer`.`customer_id` = `customer_5`.`customer_id`
    INNER JOIN `city` ON `offer`.`offer_source` = `city`.`city_id`
    INNER JOIN `country` ON `city`.`country_id` = `country`.`country_id`
    LEFT JOIN `city` AS `city_2` ON `offer`.`offer_target` = `city_2`.`city_id`
    LEFT JOIN `country` AS `country_2` ON `city_2`.`country_id` = `country_2`.`country_id`
    INNER JOIN `location` ON `offer`.`offer_subject` = `location`.`location_id`
    INNER JOIN `customer` AS `customer_6` ON `location`.`customer_id` = `customer_6`.`customer_id`
    INNER JOIN `location_type` ON `location`.`location_type_id` = `location_type`.`location_type_id`
    INNER JOIN `offer_status` ON `offer`.`offer_status_id` = `offer_status`.`offer_status_id`
    LEFT JOIN `item` ON `offer`.`offer_object` = `item`.`item_id`
    LEFT JOIN `customer` AS `customer_7` ON `item`.`customer_id` = `customer_7`.`customer_id`
    LEFT JOIN `weight_measure` ON `item`.`weight_measure_id` = `weight_measure`.`weight_measure_id`
    LEFT JOIN `volume_measure` ON `item`.`volume_measure_id` = `volume_measure`.`volume_measure_id`
    LEFT JOIN `package_type` ON `item`.`package_type_id` = `package_type`.`package_type_id`
    LEFT JOIN `user` AS `user_2` ON `item`.`user_id` = `user_2`.`user_id`
    LEFT JOIN `customer` AS `customer_8` ON `user_2`.`customer_id` = `customer_8`.`customer_id`
    INNER JOIN `offer_type` ON `offer`.`offer_type_id` = `offer_type`.`offer_type_id`
    INNER JOIN `user` AS `user_3` ON `offer`.`user_id` = `user_3`.`user_id`
    INNER JOIN `customer` AS `customer_9` ON `user_3`.`customer_id` = `customer_9`.`customer_id`
    INNER JOIN `currency` ON `offer`.`currency_code` = `currency`.`currency_code`
    INNER JOIN `offer` AS `offer_2` ON `bill_of_lading`.`bill_of_lading_offer_consignor` = `offer_2`.`offer_id`
    INNER JOIN `customer` AS `customer_10` ON `offer`.`customer_id` = `customer_10`.`customer_id`
    LEFT JOIN `city` AS `city_3` ON `offer`.`offer_source` = `city_3`.`city_id`
    LEFT JOIN `country` AS `country_3` ON `city_3`.`country_id` = `country_3`.`country_id`
    LEFT JOIN `city` AS `city_4` ON `offer`.`offer_target` = `city_4`.`city_id`
    LEFT JOIN `country` AS `country_4` ON `city_4`.`country_id` = `country_4`.`country_id`
    INNER JOIN `location` AS `location_2` ON `offer`.`offer_subject` = `location_2`.`location_id`
    INNER JOIN `customer` AS `customer_11` ON `location`.`customer_id` = `customer_11`.`customer_id`
    INNER JOIN `location_type` AS `location_type_2` ON `location`.`location_type_id` = `location_type_2`.`location_type_id`
    INNER JOIN `offer_status` AS `offer_status_2` ON `offer`.`offer_status_id` = `offer_status_2`.`offer_status_id`
    LEFT JOIN `item` AS `item_2` ON `offer`.`offer_object` = `item_2`.`item_id`
    LEFT JOIN `customer` AS `customer_12` ON `item_2`.`customer_id` = `customer_12`.`customer_id`
    LEFT JOIN `weight_measure` AS `weight_measure_2` ON `item_2`.`weight_measure_id` = `weight_measure_2`.`weight_measure_id`
    LEFT JOIN `volume_measure` AS `volume_measure_2` ON `item_2`.`volume_measure_id` = `volume_measure_2`.`volume_measure_id`
    LEFT JOIN `adr_class` AS `adr_class_2` ON `item_2`.`adr_class_id` = `adr_class_2`.`adr_class_id`
    LEFT JOIN `item_type` AS `item_type_2` ON `item_2`.`item_type_id` = `item_type_2`.`item_type_id`
    LEFT JOIN `package_type` AS `package_type_2` ON `item_2`.`package_type_id` = `package_type_2`.`package_type_id`
    LEFT JOIN `user` AS `user_4` ON `item_2`.`user_id` = `user_4`.`user_id`
    LEFT JOIN `customer` AS `customer_13` ON `user_4`.`customer_id` = `customer_13`.`customer_id`
    LEFT JOIN `offer_type` AS `offer_type_2` ON `offer`.`offer_type_id` = `offer_type_2`.`offer_type_id`
    LEFT JOIN `user` AS `user_5` ON `offer`.`user_id` = `user_5`.`user_id`
    LEFT JOIN `customer` AS `customer_14` ON `user_5`.`customer_id` = `customer_14`.`customer_id`
    INNER JOIN `currency` AS `currency_2` ON `offer`.`currency_code` = `currency_2`.`currency_code`
    INNER JOIN `currency` AS `currency_3` ON `bill_of_lading`.`currency_code` = `currency_3`.`currency_code` WHERE (`bill_of_lading`.`bill_of_lading_status_id` = 1)[/sql]
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    кривая структура БД
     
  3. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Mr.M.I.T.
    Бгг, я тебе дам ТЗ, нарисуешь "некривую" :)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а это т руками вообще писал?

    [sql]
    INNER JOIN `customer` AS `customer_2` ON `bill_of_lading`.`bill_of_lading_consignor` = `customer_2`.`customer_id`
    INNER JOIN `customer` AS `customer_3` ON `bill_of_lading`.`bill_of_lading_consignee` = `customer_3`.`customer_id`
    INNER JOIN `customer` AS `customer_4` ON `bill_of_lading`.`bill_of_lading_carrier` = `customer_4`.`customer_id` [/sql]

    для таких дел есть спец. форум
    http://www.php.ru/forum/viewforum.php?f=4
     
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Mr.M.I.T.
    ппц любимое место посылания?)
    Simpliest
    что такое ОРМ? и какое тз если не секрет
     
  6. engager

    engager Активный пользователь

    С нами с:
    21 янв 2009
    Сообщения:
    1.106
    Симпатии:
    1
    Жаль в отпуске, так бы запостил километровый селект из OracleApplications
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    И где "там" оно? =)
    и смотрю нет больше DMO и пр. всяких =)
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Mr.M.I.T.
    Естественно не руками писал.
    Поэтому последуй моему совету - не выставляй себя дураком :)

    Padaboo
    Это транслитерация английского "ORM"
     
  9. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это динамически собранный запрос. Ты его надеешься увидеть в коде?

    PHP:
    1. <?php
    2.         $model = new Model_Mapper_BillOfLading();
    3.         $model->setPredefinedSelect($model->select()->from('bill_of_lading')->where('bill_of_lading.bill_of_lading_status_id = ?', 1));
    4.         var_dump($model->enableFullInfo()->setFullInfoDepth(6)->select()->assemble());
    5.  
    Но это не в репозитории
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    лучше я буду дураком. чем умником с умными запросами =)
    Ps/ и кодогенераторами
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    о блин, у тебя там и таблицы генерятся? ну дык всё понятно
    нет, поэтому и спросил
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Если запрос тех же данных писать руками, то он получится проще?
     
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    встречались мне и "сложнее запросы", написанные руками. В них используются много-много конструкции if else. Править такое "удовольствие" - малоприятное занятие. Я за ORM.

    Тот факт что много букв ни о чём не говорит. Без explain'a спорить о "красивости" sql-запроса нельзя
     
  14. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    я все запросы пишу руками, хоть и собираю их динамически ГЫГЫГЫГЫ
     
  15. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Намного, всего 4 джойна.

    explain делается 30 с чем-то секунд. Сам запрос порядка минуты.
     
  16. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А когда кодогенераторы работали хорошо? =) Даже байт-код для реальных процессоров генерируется не идеально.
     
  17. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Simpliest
    И что за говноОРМ такая?
     
  18. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вопрос не в том хорошо или нет.
    Вопрос в том, что ORM не знает что тебе нужно. И на нетипичных запросах их описание в терминах ORM ничуть не проще, чем написать запрос вчистую руками.

    А так - да, ORM вполне неплохи, к примеру, для говнокода Mr.M.I.T. с его 3мя таблицами на всю БД они вполне подходят и качественно ускоряют разработку.

    topas
    Zend_Db_Table с небольшими плюшками.
    Оно не "говно" - ORM они все такие.
    Если хочешь быстро, то - или вот такое простынчатое или серия из -надцати запросов.

    Хочешь иметь хороший запрос сложнее чем SELECT BY ID - пиши ручками.

    Я еще посмотрю как оно работает с кешированием если JOIN заменить на последовательные запросы.
     
  19. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Вот кстати, из той же серии. Скорость разработки vs скорость выполнения.

    По последнему профайлингу 46% времени заняли Zend_Config + Zend_Navigation
     
  20. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    У нас не говнокод, таблиц много и мы используем ORM.
    Просто большинство связей lazy load, так как прослойка кеша есть.
     
  21. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    MiksIr
    Ты путаешь причинно-следственную связь. Я не писал "ORM => говнокод" :)

    Вот именно, а это рождает не запрос как в 1м посте, а цепочку запросов.

    Более того, я уже говорил - ORM не запрещает собрать кошерный же запрос, просто, это не быстрее в написании.
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Simpliest
    ну куда нам до твоих 3х строчек в ЗФ? ты за два месяца сколкьо написал? килобайт 200 то есть? врятли...
    Ps/ и я не использую ОРМ и таких запросаов у меня нет

    и вообще я думал ты это руками написал и за то чтобы это на орм "переписать"
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    а причём тут как они работают, главное где. у него там генерируются классы с 3мя св-вами ввиде массивов и таблицы.
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    и ZF главное ядро производительности. зато не говнокод
     
  25. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Возможно (не факт), что взяв в руки ТЗ написать такой запрос руками и быстрее... чем создать все модели, прописать меж них связи и написать одну выгребающую строчку - запрос в ORM. Однако, наиболее вероятно, что работать он не будет, ибо где-то будет допущена ошибка... и дай бог если опечатка, а скорее всего пропущена какая-то связь.
    ORM может и не ускоряет время разработки, но вообще-то говнокодить всегда быстрее было, не знаю с чего ты скорость как критерий выкатил. А вот вероятность ошибок всякие ORM понижают... как и понимание того, что же тут наворочено через эдак годик.