1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.2.2 Запись в таблицу бд

Тема в разделе "Для новичков", создана пользователем mad@Max, 02.10.2013.

Загрузка
  1. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Ребят, объясните, пожалуйста, синтаксис записи данных в бд. У меня есть своя таблица (через инстал/анинстал научился создавать/удалять) и мне нужно ее заполнить. Дошел до DataWriter и у меня лопнул мозг:)
    Задача: нужно сделать перебор по темам в определенном разделе, собрать данные и вставить их (через insert()) в мою таблицу.
     
    Последнее редактирование: 03.10.2013
  2. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    DataWriter ксена аналогичен DataManager vbulletin-а, а вообще это классический Data Mapper (у фаулера неплохое описание), только с урезанным функционалом группировки и аггрегации данных (вообще нет), т.е. служит только для создания/изменения какой-то единичной записи в БД с возможностью валидации, pre/post событий и т.п.
    Перебор можно обычным select-ом делать (хотя лучше использовать отдельные методы модели XenForo_Model_Thread для извлечения тем по заданным условиям), инсерт тоже можно обычным insert-ом если есть 100% гарантия валидности записываемых данных. Датарайтеры удобны в контроллерах при сохранении данных вводимым пользователем.
     
    managerprosto нравится это.
  3. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Перебор я, вроде как, написал, теперь мне нужно пройтись foreach по массиву. Где нибудь есть гайд или пример подобной операции, как с валидацей так и без нее?
     
  4. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Методом тыка нашел необходимые "методы" для выполнения записи. А сам объект, действительно работает похоже на vb.
    PHP:
    class RecSys_DataWriter_Write extends Xenforo_DataWriter
    {
        protected function 
    _getFields() {
            return array(
                
    'xf_recsys' => array(
                    
    'id'        => array('type' => self::TYPE_UINT'autoIncrement' => true),
                    
    'user_nick'    => array('type' => self::TYPE_STRING'required' => true),
                    
    'user_id'    => array('type' => self::TYPE_UINT'required' => true),
                    
    'answer_list'    => array('type' => self::TYPE_STRING'required' => true),
                    
    'devision'    => array('type' => self::TYPE_STRING'required' => true),
                    
    'status'    => array('type' => self::TYPE_UINT'required' => true),
                    
    'date'        => array('type' => self::TYPE_UINT'required' => true),
                )
            );
        }

        protected function 
    _getExistingData($data)
        {
            if (!
    $recID $this->_getExistingPrimaryKey($data'id'))
            {
                return 
    false;
            }

            return array(
    'xf_recsys' => $this->getModelFromCache('RecSys_Model_Requests')->getKeylinkByID($recID));
        }

        protected function 
    _getUpdateCondition($tableName)
        {
            return 
    'id = ' $this->_db->quote($this->getExisting('id'));
        }
    }
     
    Mirovinger и Yoskaldyr нравится это.

Поделиться этой страницей