Codeigniter - Получить значение из одной таблицы БД и добавить в другую таблицу БД при отправке формы - PullRequest
0 голосов
/ 19 февраля 2019

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

В панели администратора Admin может добавить категорию события и предоставить имя и цвет (из меню выбора).Шестнадцатеричное значение сохраняется в базе данных.

event_categories_db

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

Категория - это меню выбора из категорий событий, извлеченное из базы данных.

Когда я добавляю новое событие, я хочу использовать имя категории события, получить его цвет и затем сохранить его вместе с событием вбаза данных в последнем столбце выглядит так:

event

Сохранение события:

Я использую проверку формы codeigniter, и если все поляя пытаюсь получить цвет из таблицы категорий событий и добавить его к событию в моем массиве $ save_data:

public function add_save()
{


    $this->form_validation->set_rules('title', 'Title', 'trim|required|max_length[500]');
    $this->form_validation->set_rules('start', 'Start', 'trim|required');
    $this->form_validation->set_rules('end', 'End', 'trim|required');
    $this->form_validation->set_rules('description', 'Description', 'trim|required|max_length[1000]');
    $this->form_validation->set_rules('category', 'Category', 'trim|required|max_length[100]');
    $this->form_validation->set_rules('has_attendance', 'Has Attendance', 'trim|max_length[1]');
    $this->form_validation->set_rules('is_recurring', 'Is Recurring', 'trim|required|max_length[1]');


    if ($this->form_validation->run()) {

    // I am adding this to capture color from event_category table
    // 1. use the input category field from event 
    // 2. then I select all from event_category table
    // 3. WHERE name is equal to the selected category name from input
    // 4. The color is the reulting rows color field
    $selected_event_category = $this->input->post('category');
    $this->db->get('event_category'); 
    $this->db->where('name',$selected_event_category);
    $the_color = $this->db->get()->result()->row('color');


        $save_data = [
            'title' => $this->input->post('title'),
            'start' => $this->input->post('start'),
            'end' => $this->input->post('end'),
            'description' => $this->input->post('description'),
            'category' => $this->input->post('category'),
            'has_attendance' => $this->input->post('has_attendance'),
            'is_recurring' => $this->input->post('is_recurring'),
            'color' => $the_color //I have added this from above query
        ];

        $save_events = $this->model_events->store($save_data);

    } else {
        $this->data['success'] = false;
        $this->data['message'] = validation_errors();
    }

    echo json_encode($this->data);
}

Я попытался выполнить запрос и сохранить результат в переменной с именем$ the_color.Затем я использую эту переменную в своем массиве $ save_data в качестве значения цвета.

Но форма не будет опубликована, и я не получаю никаких ошибок.Событие не будет сохранено, оно вообще не попадет в базу данных.

Я надеюсь, что кто-то может помочь указать, где я ошибаюсь?

1 Ответ

0 голосов
/ 19 февраля 2019

Как насчет этого?Я думаю, что вы можете использовать метод row (), если вы ожидаете одну запись из базы данных.Более того, когда вы храните данные, вам не нужно присваивать их переменной.

Метод в файле модели:

public function getEventCategory($selected_event_category) {
    $this->db->where('name', $selected_event_category);
    $q = $this->db->get('event_category');
    $q = $q->row();

    return $q;
}

А затем в контроллере

    if ($this->form_validation->run()) {

        // I am adding this to capture color from event_category table
        // 1. use the input category field from event 
        // 2. then I select all from event_category table
        // 3. WHERE name is equal to the selected category name from input
        // 4. The color is the reulting rows color field
        $selected_event_category = $this->input->post('category');
        $event_category = $this->Your_model_here->getEventCategory($selected_event_categor);
        $the_color = $event_category->color;

            $save_data = [
                'title' => $this->input->post('title'),
                'start' => $this->input->post('start'),
                'end' => $this->input->post('end'),
                'description' => $this->input->post('description'),
                'category' => $this->input->post('category'),
                'has_attendance' => $this->input->post('has_attendance'),
                'is_recurring' => $this->input->post('is_recurring'),
                'color' => $the_color //I have added this from above query
            ];

            $this->model_events->store($save_data);

        } else {
            $this->data['success'] = false;
            $this->data['message'] = validation_errors();
        }

        echo json_encode($this->data);
    }

Другая проблема заключается в том, что вы должны передать свой запрос модели.Codeigniter базируется на модели MVC, поэтому мы должны избегать использования запросов в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...