Запрос к базе без префикса icms2+

#1 4 октября 2015 в 23:28
Можно ли обратиться к базе запросом типа
  1. $this->get('blabla');
Если у таблицы нет префикса?
#2 4 октября 2015 в 23:33
  1. public function getSQL(){
  2.  
  3. $select = implode(', ', $this->select);
  4.  
  5. $sql = "SELECT {$select}
  6. FROM cms_{$this->table} i
  7. ";
Из чего следует ответ.

Работайте напрямую по примеру из гета:
  1. $result = $this->db->query($sql);
  2.  
  3. // если запрос ничего не вернул, возвращаем ложь
  4. if (!$this->db->numRows($result)){ return false; }
  5.  
  6. $items = array();
  7.  
  8. // перебираем все вернувшиеся строки
  9. while($item = $this->db->fetchAssoc($result)){
#3 12 августа 2022 в 02:26

Добрый ночи. Тему создать не могу нет прав. Можете подсказать как сделать запрос в базу без прфекса

  1. public function addАccounts($registration){
  2.  
  3. $registration['user_id'] = cmsUser::get('id');
  4.  
  5. return $this->insert('accounts', $registration);
  6.  
  7. }
#5 12 августа 2022 в 09:05

На мой взгляд, лучше как тут github.com/instantsoft/icms2/blob/0f6d5db492690304edae5379ddaa691eedfc6f94/system/controllers/admin/forms/form_ctypes_field.php#L276

Т.е. сперва

  1. $this->setTablePrefix('');

чтобы убрать префикс в запросах. Потом ваш запрос.

  1. $this->insert('accounts', $registration);

А затем

  1. $this->setTablePrefix(cmsModel::DEFAULT_TABLE_PREFIX);

Чтобы остальные запросы дальше шли с префиксом.

#6 12 августа 2022 в 10:29

 Zau4man, код

  1. $this->setTablePrefix('');

удаляет «con_», а не «cms_» и позволяет использовать профили пользователей и группы (сообщества) как один из типов контента.

#7 12 августа 2022 в 11:20

 Loadырь, тогда так

  1. $old_prefix = $this->db->prefix;
  2. $this->db->prefix = "";

а вернуть обратно через

  1. $this->db->prefix = $old_prefix;

И не надо будет пилить запрос вручную...

#8 12 августа 2022 в 11:33

Тогда получается так

  1. public function addАccounts($registration){
  2.  
  3. $registration['user_id'] = cmsUser::get('id');
  4.  
  5. $this->db->setDbPrefix('');
  6.  
  7. $insert = $this->insert('accounts', $registration);
  8.  
  9. $this->db->setDbPrefix(cmsConfig::get('db_prefix'));
  10.  
  11. return $insert;
  12.  
  13. }
#9 12 августа 2022 в 13:42

Спасибо большое за помощь. Все получилось.

Но теперь не могу валидацию формы сделать 

  1. 'type' => 'fieldset',
  2. 'title' => 'Регистрация игрового аккаунта',
  3. 'childs' => array(
  4. new fieldString('login', array(
  5. 'title' => 'Логин',
  6. 'rules'=>array(
  7. array('required'),
  8. array('regexp', "/^([a-z0-9\-_\/\.]*)$/"),
  9. array('max_length', 24),
  10. array('min_length', 6),
  11. array('unique', 'accounts', 'login')// для проверки получается таблица с прифексом
  12. ),
  13.  
  14. )),
  15.  
  16. new fieldString('password', array(
  17. 'title' => 'Пароль',
  18. 'is_password' => true,
  19. 'options'=>array(
  20. 'min_length'=> 6,
  21. 'max_length'=> 36
  22. ),
  23. 'rules' => array(
  24. array('required')
  25. )
  26. ))
  27. )
  28. )

не подскажете как тут убрать префикс таблицы ?

#10 12 августа 2022 в 14:00

Но теперь не могу валидацию формы сделать 

Rico

Вам нужно в таком случае объявить метод в классе формы, начинающийся на validate и там сделать валидацию как примерно здесь. Валидация полей ищет методы вот так.

  1. public function validate_unique($table_name, $field_name, $value){
  2. if (empty($value)) { return true; }
  3. if (!in_array(gettype($value), ['integer', 'string', 'double'])) { return ERR_VALIDATE_INVALID; }
  4. $db = cmsDatabase::getInstance();
  5. $db->setDbPrefix('');
  6. $result = $db->isFieldUnique($table_name, $field_name, $value);
  7. $db->setDbPrefix(cmsConfig::get('db_prefix'));
  8. if (!$result) { return ERR_VALIDATE_UNIQUE; }
  9. return true;
  10. }
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.