За последние 24 часа нас посетили 50899 программистов и 1761 робот. Сейчас ищут 947 программистов ...

Абстракция БД (Where условие)

Тема в разделе "PHP и базы данных", создана пользователем kostyl, 21 мар 2009.

  1. kostyl

    kostyl Guest

    Доброе время. Такой вопрос. Если делать компонент для работы с разными базами данных, то необходимо в коде объекта, получаемого свои данные из БД НЕ писать сам запрос. Думаю это и так всем понятно. Но вот, я могу абстрагировать тип запроса(сел, дел, инс), набор обрабатываемых полей и имена таблиц. А вот с условиями выборки у меня возникают трудности. Как передать условие не описывая его явно. Например в Postgrey надо брать поля в двойные кавычки, а в MySQL в ` ` эти штуки. Никак не могу придумать как делать. Может кто знает как реализовать? Передавать строку без всего а потом выявлять в ней поля и обрамлять тоже маразм. Наверняка есть еще какието нюансы, кроме обрамления...
     
  2. Mr.M.I.T.

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

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    м те кросс БД чтоли надо?
    создай для каждой свой объект с запросами и не парься =)
     
  3. kostyl

    kostyl Guest

    Уууу, это довольно жестокий вариант... Ну все равно спасибо за ответ. Их тут не густо.
     
  4. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  5. kostyl

    kostyl Guest

    Sergey89
    Спасибо, никак не мог найти эту ветку!!!!
    Mr.M.I.T.
    Думаю попробывать. Но не совсем именно так - думаю может получиться почти аспектно-ориентированное чтото... Идея такова:
    Есть класс SimpleObject.
    SimpleObject фактически соответствует строке таблицы БД
    У него есть такие свойства:
    1 ставит в соответствие поле БД с исходным свойством объекта;
    2 через __get и __set осуществляет доступ к этим свойствам;
    3 имеет методы инициализации, добавления, сохранения и тд.
    4 имеет механизмы взаимодействия с другими объектами этого уровня абстракции.
    Есть класс SimpleObjects
    SimpeObjects фактически соотвествует нескольким строкам БД
    У него есть такие свойства:
    Почти все теже что и у SimpleObject но с отложенной инициализацией и итераторным интерфейсом.
    Теперь мне просто надо создать такие объекты:
    MySQLSimpleObject, OraSimpleObject, IBaseSimpleObject и т.д.
    Теперь несколько слов о свойстве 4:
    Этот механизм предназначен для объединения объектов SimpleObject и SimpeObjects во всех направлениях, организуя связи один ко многим и т. п. Ведь без этого свойства если, например, взять класс User(SimpleObject) и UserRoles(SimpeObjects) то при показе всех пяти ролей пользователя(или шести, без разницы) выполняется куча запросов на получение данных. Но благодаря механизму 4, вся выборка происходит одним запросом с Left Join.
    Как вам идея, ребятки?
     
  6. kostyl

    kostyl Guest

    мда, чувствую уже всем эти абстракции БД уже надоели хуже горькой редьки...
     
  7. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    лучше сладкая морковка.
    =)
     
  8. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ну вот когда сделаешь, тогда и посмотрим =). Я тоже начинал писать нечто подобное с поддержкой lazy load, bulk load, many to many, one to many, one to one relations. Но как обычно времени не хватает.
     
  9. Goryn

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

    С нами с:
    4 апр 2006
    Сообщения:
    398
    Симпатии:
    0
    Адрес:
    Ярославль
    А ты пробовал выполнить любой запрос в MySql без использования ` `(этих штук)?.... :D
     
  10. 440Hz

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

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    конечно. затачивать прямо под БД, а не абстрагироваться до умопомрачния.
     
  11. kostyl

    kostyl Guest

    440Hz
    да, я плюнул на эту все фигню и начал точить - как гора с плеч :) !!!