#1 2012.06.16 23:01

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

DataObject или велосипед от меня

В общем задался целью написать велосипед для работы с базой на "методах"...
Готовый класс конечно хорошо, но интересно было повелосипедить...

Для начала планируется:
-Написать синтаксис для основных "операций" типа: select, update, insert, delete
-Организовать возможность работы с такими драйверами как mysql, sqlite, postgre
-Сделать так необходимую для pdo "Multiple" как в mysqli

Стоит ли? или все таки юзать уже готовые классы? (Для себя подходящих я так и не нашел)

В общем начало (пока только начало синтаксиса) сразу извиняюсь за отсутствие комментариев:

Код:

1
span style="color: #0000BB"><?phpclass DataObject{ private $_select, $_from, $_where; const TABLE_PREFIX = 'nu3on_'; public function __construct() { } public function select() { $arrArgs = func_get_args(); $intTotal = count($arrArgs); if (! $intTotal) { $strArg = '*'; } else if ($intTotal == 1) { $strArg = $arrArgs[0]; } else { $strArg = ''; $intTotal = $intTotal - 1; for ($i=0; $i<=$intTotal; ++$i) { $strArg .= '`' . $arrArgs[$i] . '`'; $strArg .= ($i == $intTotal) ? '' : ', '; } } $this -> _select = 'SELECT ' . $strArg . ' '; return $this; } public function from($strData) { $this -> _from = DataObject :: TABLE_PREFIX . $strData; $this -> _from = 'FROM `' . $this -> _from . '` '; return $this; } public function where($mixData, $strKey=false) { if ($strKey) { $strArg = '`' . $mixData . '` = \'' . $strKey . '\''; } else { if (is_array($mixData)) { $intTotal = count($mixData); if (! $intTotal) { return $this; } else if ($intTotal == 1) { } else { $strArg = ''; $i = 0; foreach ($mixData as $key => $val) { ++ $i; if (is_array($val)) { $strArg .= '`' . $val[0] . '`' . $val[1] . '\'' . $val[2] . '\''; } else { $strArg .= '`' . $key . '`' . ' = \'' . $val . '\''; } $strArg .= ($i == $intTotal) ? '' : ', '; } } } else { throw new Exception('Ошибка синтаксиса в методе where.'); } } $this -> _where = 'WHERE ' . $strArg . ' '; return $this; }}

Код:

1
span style="color: #0000BB"><?php$dbObj -> select() -> from('test') -> where('id', '1');//SELECT * FROM `nu3on_test` WHERE `id` = '1'$dbObj -> select('a') -> from('test') -> where(array('id' => '1', 'name' =>'val'));//SELECT `a` FROM `nu3on_test` WHERE `id` = '1', `name` = 'val'$dbObj -> select('a', 'b', 'c') -> from('test') -> where(array('id' => '1', array('id', '>', 'val')));// SELECT `a`, `b`, `c` FROM `nu3on_test` WHERE `id` = '1', `id`>'val'

Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#2 2012.06.16 23:41

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: DataObject или велосипед от меня

Может взять готовое и его чуть изменить, чем все с нуля, там тоже самое наверно должно быть?

Неактивен

#3 2012.06.16 23:57

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: DataObject или велосипед от меня

tipsun написал:

Может взять готовое и его чуть изменить, чем все с нуля, там тоже самое наверно должно быть?

примерно да... вот можешь глянуть реализацию одного из... http://pear.php.net/package/DB_DataObject/docs


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#4 2012.06.17 00:08

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: DataObject или велосипед от меня

Nu3oN, ну как обычно. Покрыть весь SQL, на все СУБД все равно не выйдет. Но как опыт полезно, наверное.

Неактивен

#5 2012.06.17 00:11

Nu3oN
Moderator
Откуда: БелгородЭ
Зарегистрирован: 2010.04.28
Сообщений: 805
Карма: 11
Профиль Веб-сайт

Re: DataObject или велосипед от меня

что-то написал я еще пару методов, "отсоединил" mysql в отдельный класс и подумал отложу ка я это дело на потом big_smile


Я буду лучше голоден, но между креслом и рулем и на дороге.

Неактивен

#6 2012.06.17 10:25

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: DataObject или велосипед от меня

Nu3oN, чего-то я не совсем понял ссылку.
Там самому надо создавать классы Person, Friends и прочее?
Если да, то какой прикол использовать это?
Я, честно говоря, думал это все автоматически генерируется, типа какие поля заданны она как-то там создает объекты и т.д. smile
Вот оно - разочарование big_smile
Сейчас скачаю, может больше пойму.

Отредактировано tipsun (2012.06.17 10:34)

Неактивен

#7 2012.06.17 10:37

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: DataObject или велосипед от меня

tipsun, в Doctrine2 можно, например, сгенерить код на основе готовой структуры БД.

Неактивен

#8 2012.06.17 10:41

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: DataObject или велосипед от меня

Gemorroj, сейчас посмотрю.
http://wapinet.ru/forum/uploads.php?file=Doctrine2.png
Явно не для моих мозгов smile

Отредактировано tipsun (2012.06.17 11:00)

Неактивен

#9 2012.06.17 11:56

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: DataObject или велосипед от меня

tipsun, ну да, там довольно высокий порог вхождения. прежде чем начать что-то применять на практике, нужно хорошенько зачитать мануалов.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.011 s