Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2012, 00:11   #21
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
а как его заставить разлечать AND/IN/ONE/LIKE ???
Это всё - отдельные методы:
where()
or_where()
where_in()
where_not_in()
like()
not_like()

и т.д.
Через эти методы - формируем условие запроса в отдельный атрибут, если он пуст - добавляем WHERE, если нет, и метод не or_ - добавляем AND, в противном случае - OR.

Методы могут принимать как строку(произвольное_условие/часть_условия), так и массив значений, или просто отдельную пару "поле" - "значение".
Операторы в условиях - "равно" по-умолчанию, остальные - задаем вместе с названием поля:
PHP код:
->where('field_name1'$value1);// =
->where('field_name2 <='$value2);// <=
->where('field_name3 >= ' $value3);// >=
// получаем:
// WHERE `field_name1` = 'value1' 
// AND `field_name2` <= 'value2' 
// AND `field_name3` >= 'value3'
->where(array('field_name1' => $value1'field_name2 !=' => $value2));// = AND !=
// получаем:
// WHERE `field_name1` = 'value1' 
// AND `field_name2` != 'value2' 
Методы также выполняют все prepared-операции (экранирование и т.п.).
Andkorol вне форума Ответить с цитированием
Старый 17.03.2012, 00:30   #22
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Помнится в доктирине также поступили с этим. Ну типа Where(), AndWhere().
Хм.. надо подумать, может так и будет лучше. Экранировать и чистить этим методам незачем так как данные уже приходят готовые.

Спасибо всем учасникам. Надеюсь тема будет розвиватся.
dem66 вне форума Ответить с цитированием
Старый 17.03.2012, 14:40   #23
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Вот зацените что получается
PHP код:
private $where;

        public function 
Build($str$str2$type){
            
$tmp explode(" "$str);
            
$array = array();

            foreach(
$tmp as $val){
                if(!empty(
$val)){
                   
$array[] = $val;
                }
            }

              if(
substr_count($array[0],'.')==0){
                  
$pole '`'.$array[0].'`';
              }else{
                  
$pole $array[0];
              }

              if(
substr_count($str2,' ')>&& substr_count($str2,'.')>|| substr_count($str2,' ')==&& substr_count($str2,'.')==0){
                  
$data "'".$str2."'";
              }elseif(
substr_count($str2,' ')==&& substr_count($str2,'.')==1){
                  
$data $str2;
              }else{
                  
$data "`".$str2."`";
              }

              if(!isset(
$array[1])){
                  
$uslov '=';
              }else{
                  
$uslov $array[1];
              }

              if(empty(
$this->where)){
                  
$nach " WHERE ";
              }elseif(!empty(
$this->where) && $type!="OR"){
                  
$nach " AND ";
              }else{
                  
$nach " OR ";
              }
              
                  switch(
$type){
                      case(
"AND"):
                          
$this->where .= $nach.$pole.$uslov.$data;
                      break;
                      case(
"OR"):
                          
$this->where .= $nach.$pole.$uslov.$data;
                      break;
                      case(
"IN"):
                          
$this->where .= $nach.$pole." IN (".$data.")";
                      break;
                      case(
"LIKE"):
                          
$this->where .= $nach.$pole." LIKE ".$data;
                      break;
                  }
          
        }

        public function 
Where($where$velue=NULL){

            if(
is_array($where)){
                foreach(
$where as $key=>$value){
                    
$this->Build($key$value,  "AND");
                }
            }else{
                
$this->Build($where$velue,  "AND");
            }
                
            echo 
$this->where."<br><hr>";

            return 
$this;
        }

        public function 
Like($where$velue=NULL){

            if(
is_array($where)){
                foreach(
$where as $key=>$value){
                    
$this->Build($key$value,  "LIKE");
                }
            }else{
                
$this->Build($where$velue,  "LIKE");
            }

            echo 
$this->where."<br><hr>";

            return 
$this;
        }

        public function 
destroy(){
            unset(
$this->where);
        } 
метод destroy дописал просто для чистоты эксперемента. Чтобы она не кидало все в одну кучу. Так как поидее после выполнения нужно операции ну там типа записать, получить, обновить условие будет очищатся.

Пример использования:
PHP код:
ORM::factory('test')->Where(array("razdel.id =" => 1"content.razdel =" => "razdel.id"))->destroy();
              
ORM::factory('test')->Where("razdel.id ="1)->destroy();

ORM::factory('test')->Like("razdel.name""%pupkin%")->destroy(); 
Результат:
Код:
WHERE razdel.id='1' AND content.razdel=razdel.id

WHERE razdel.id='1'

WHERE razdel.name LIKE '%pupkin%'
Огромное спасибо Andkorol за идею с билдером и Cronos20 за толчек всторону синглтона

Последний раз редактировалось dem66; 17.03.2012 в 14:47.
dem66 вне форума Ответить с цитированием
Старый 17.03.2012, 15:08   #24
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от dem66 Посмотреть сообщение
метод destroy дописал просто для чистоты эксперемента. Чтобы она не кидало все в одну кучу. Так как поидее после выполнения нужно операции ну там типа записать, получить, обновить условие будет очищатся.
Этот метод(destroy) - должен вызываться в самих методах ваших запросов(select, insert, update).
Выполнили любой запрос - очистили все условия.
Andkorol вне форума Ответить с цитированием
Старый 17.03.2012, 15:30   #25
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

я об этом и написал. там уже под конец оно так и есть.

А здесь я его просто вызвал вручную
dem66 вне форума Ответить с цитированием
Старый 17.03.2012, 16:14   #26
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Я просто к тому, что подобные методы очень правильно делать private - и не давать в руки программистам..
Andkorol вне форума Ответить с цитированием
Старый 17.03.2012, 16:24   #27
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

изначально его там вобше небыло. я зделал для того чтобы во время тестов убрать лишнее. ну а так то там все сразу напрямую через unset
dem66 вне форума Ответить с цитированием
Старый 17.03.2012, 17:59   #28
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Так более мение заставил работать. Но вот лажа получается, оно несовместимо с _get и _set. покрайней мере они у меня начинают срабатывать когда ненадо. Может подскажите как их убедить этого не делать?
dem66 вне форума Ответить с цитированием
Старый 17.03.2012, 19:24   #29
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Какие будут еще идеи?
dem66 вне форума Ответить с цитированием
Старый 18.03.2012, 13:05   #30
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Вот всетаки осталась одна большая проблема.
ОРМ отказывается добавлять в базу данных большой текст. Вот например текст в 16 Кб ему уже неосилить. Оно тупо оставляет то что и было.
Это все происходит апдейтом.

И теперь вопрос- где прощет? Здесь или текст просто недоходит до апдейта?
PHP код:
$body $request->getVar('content'0'post''string');
$descrip $request->getVar('descrip'0'post''string');
$title $request->getVar('title'0'post''string');

ORM::factory()->prepare("UPDATE `content` SET content.body='".$body."', content.descrip='".$descrip."' WHERE content.razdel='".$edit_id."'")->execute(); 
Может косяк в обработке ПОСТ запроса?
PHP код:
<?php
public $_post_params = array();

public function 
__construct(){        
$this->_post_params $_POST;
}

function 
getVar($key$def=NULL$method=NULL$type=NULL$clear=NULL){
                         if(empty(
$method)){
                                    if(empty(
$type)){
                                        if(!empty(
$clear)){
                                            return 
getRequest::__data_clean($REQUEST[$key]);
                                        }else{
                                            return 
$REQUEST[$key];
                                        }
                                    }else{
                                        if(
gettype($REQUEST[$key])==$type){
                                            return 
getRequest::__data_clean($REQUEST[$key]);
                                        }else{
                                            return 
NULL;
                                        }
                                    }
                         }else{
                                switch(
$method)
                                {
                                    case(
'post');
                                        if(isset(
$this->_post_params[$key])){
                                            if(empty(
$type)){
                                                if(!empty(
$clear)){
                                                    return 
getRequest::__data_clean($this->_post_params[$key]);
                                                }else{
                                                    return 
$this->_post_params[$key];
                                                }
                                            }else{
                                                if(
gettype($this->_post_params[$key])==$type){
                                                    if(!empty(
$clear)){
                                                        return 
getRequest::__data_clean($this->_post_params[$key]);
                                                    }else{
                                                        return 
$this->_post_params[$key];
                                                    }
                                                }else{
                                                    return 
NULL;
                                                }
                                            }
                                        }else{
                                            return 
NULL;
                                        }
                                    break;
                                }
                         }        
                }
dem66 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Spring MVC Exact Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 0 21.10.2011 14:38
Thread и MVC OnlyFart ASP.NET 0 06.05.2011 11:12
MVC AgentSmit PHP 2 11.01.2011 14:51
необходимость mvc mrgrudge PHP 2 13.12.2010 12:41
Кликер MVC++ jestyan Помощь студентам 0 10.12.2010 14:10