bkonst
.. хочется странного?...
Какие запросы мешают вам использовать ORM?
После проведения раскопок среди публично-доступных ORM-библиотек из списка на PHP Wiki создалось впечатление, что все они позволяют использовать только самые примитивные условия выборки (вида "равно/не равно", "больше/меньше"), а при необходимости связывания таблиц единственной альтернативой является использование "сырого" SQL или какого-нибудь SQL-подобного языка.
Почитал обсуждения ORM / паттерна QueryObject (например Конструктор SQL-запросов и Постоение SQL запроссов. Active Record. Реализация. Паттерны.). Похоже, что у опытных программистов на почве урезанных возможностей ORM-библиотек сформировалось стойкое отвращение к автоматической генерации SQL.
Возник вопрос: насколько востребована была бы ORM, позволяющая строить сложные критерии отбора по связанным таблицам (допустим, построение запроса, упомянутого в http://phpclub.ru/talk/showthread.php?s=&postid=651520, могло бы(*) выглядеть так:
), с использованием аггрегатных функций и предиката EXISTS? По моему, такой инструмент позволил бы обойтись без написания SQL вообще(**), что улучшило бы переносимость и значительно сократило бы объем рутинных работ. Есть ли, с вашей точки зрения, в этом какие-то неочевидные подводные камни? Встречали ли вы какие-нибудь (достаточно часто используемые) виды запросов, которые не уложатся в подобную схему?
(*) все совпадения с реально существующим кодом случайны
(**) поймите меня правильно, я ничего не имею против SQL; мне не нравится рутинное написание огромного количества почти одинаковых запросов.
После проведения раскопок среди публично-доступных ORM-библиотек из списка на PHP Wiki создалось впечатление, что все они позволяют использовать только самые примитивные условия выборки (вида "равно/не равно", "больше/меньше"), а при необходимости связывания таблиц единственной альтернативой является использование "сырого" SQL или какого-нибудь SQL-подобного языка.
Почитал обсуждения ORM / паттерна QueryObject (например Конструктор SQL-запросов и Постоение SQL запроссов. Active Record. Реализация. Паттерны.). Похоже, что у опытных программистов на почве урезанных возможностей ORM-библиотек сформировалось стойкое отвращение к автоматической генерации SQL.
Возник вопрос: насколько востребована была бы ORM, позволяющая строить сложные критерии отбора по связанным таблицам (допустим, построение запроса, упомянутого в http://phpclub.ru/talk/showthread.php?s=&postid=651520, могло бы(*) выглядеть так:
PHP:
$filter_gsm = new ORMFilterReferring("Phone", "Property", new ORMFilterEquality('val', '2'));
$filter_vib = new ORMFilterReferring("Phone", "Property", new ORMFilterEquality('val', '10'));
$filter_subproperties = new ORMFilterCompositeAND();
$filter_subproperties->add_filter($filter_gsm);
$filter_subproperties->add_filter($filter_vib);
$phones = $manager->items($filter);
(*) все совпадения с реально существующим кодом случайны
(**) поймите меня правильно, я ничего не имею против SQL; мне не нравится рутинное написание огромного количества почти одинаковых запросов.