Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с организацией ORM, Тип данных получаемый из MySQL 
V
    Опции темы
evilice
Дата 20.10.2010, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



Я написал метод, который получает данные из MySQL и динамически создает экземпляр класса, свойства которого соответствуют полям таблицы.
например:
таблица в MySQL:
Код

CREATE TABLE users (
                `id` INT(12) AUTO_INCREMENT PRIMARY KEY,
                `name` VARCHAR(30) NOT NULL,
                `pass` VARCHAR(40) NOT NULL,
                `role` INT(6) NOT NULL DEFAULT 0
            );


PHP class:
Код

class User extends Model {
    protected $id;
    protected $name;
    protected $pass;
    protected $role;
   ...
}


Но вот проблема, т.к. MySQL возвращает значения, как "строку", все свойства экземпляра автоматически становятся "String".
Я, конечно, понимаю, что для PHP - это не принципиально, но для моей системы очень даже важно!
Просто есть ещё один метод, описанный в родительском классе, который генерирует SQL-запросы основываясь на наборе свойств и их типах.
Таким образом запрос получается вида:
Код

update users set name='username', pass='O9asd8dlj', $role='12' where id='101'

а должен был быть таким:
Код

update users set name='username', pass='O9asd8dlj', $role=12 where id=101


Так вот вопрос заключается в следующем: как заставить mysql возвращать реальные типы данных(если это возможно), ну или как со 100% уверенностью определить int или string скрыт в строке.
PM MAIL   Вверх
enoff
Дата 20.10.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



Код

SHOW CREATE TABLE `users`

далее регулярками.
PM MAIL ICQ Skype GTalk   Вверх
evilice
Дата 20.10.2010, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 27.11.2008

Репутация: нет
Всего: нет



Решение подкралось откуда и следовало ожидать.
Я имею опыт разработки на Java и у меня вошло в привычку для всех свойств класса прописывать getters и setters.
Так вот при получении ответа от БД, я собираю имя сеттера на основе имени поля таблицы.
т.е. если имя поля `id` преобразовываю в setId и в качестве параметра передаю значение поля, а сеттере делаю с этим значением всё что нужно.

Код

public function set($map) {
        if(!$map) return false;
        foreach ($map as $key => $value) {
            if(gettype($key) != 'integer') {
                $key[0] = strtoupper($key[0]);
                $key = 'set'.$key;
                $this->$key($value);
            }
        }
    }


ну и непосредственно код одного сеттера:
Код

public function setId($value) { $this->id = (int)$value; }


Это сообщение отредактировал(а) evilice - 20.10.2010, 08:28
PM MAIL   Вверх
solenko
Дата 20.10.2010, 14:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Цитата(enoff @  19.10.2010,  23:35 Найти цитируемый пост)

    
SHOW CREATE TABLE `users`

далее регулярками. 

Зачем такие извраты? Есть show fields, который вернет очень даже удобный RS



--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 20.10.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: 11
Всего: 13



solenko, спасибо, не знал. Перед постом поискал, ничего не нашел(
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0864 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.