Ошибка MySQL 1054 при попытке вызова нескольких моделей из функции контроллера в CodeIgniter - PullRequest
0 голосов
/ 23 августа 2011

Я хочу написать функцию, которая будет принимать серию полей и вводить разные значения в разные базы данных. Сейчас это только две отдельные записи в базе данных, но я надеюсь реализовать их позже. Я хочу ввести нового святого в одну таблицу, а затем, если пользователь заполняет поле 'ofRegion', я хочу, чтобы он был сохранен в другой таблице. Моя проблема возникает, когда модель пытается ввести информацию для «ofRegion». Я получаю ошибку MySQL (1054) о том, что существует неизвестный столбец. По ошибке MySQL я вижу, что она пытается ввести всю информацию из предыдущей записи, а также новую информацию. Как очистить старую информацию? Могу ли я это сделать или мне понадобится несколько моделей для каждой таблицы, в которую я хочу ввести информацию?

Функции модели

public function input_saint($newSaintID)
{
    //grab values from post stream
    $this->saintID = $newSaintID;
    $this->active = 1;
    $this->nameFirst = $this->input->post('nameFirst');
    $this->nameLast = $this->input->post('nameLast');
    $this->gender = $this->input->post('gender');
    $this->martyr = $this->input->post('martyr');
    $this->nationality = $this->input->post('nationality');
    $this->feastMonth = $this->input->post('feastMonth');
    $this->feastDay = $this->input->post('feastDay');
    $this->about = $this->input->post('about');

    //insert information into the saint table
    $this->db->insert('saint_table', $this);
}

public function set_of_region($newSaintID)
{
    $this->saintID = $newSaintID;
    $this->ofRegion = $this->input->post('ofRegion');
    $this->db->insert('saint_of_region', $this);
}

Функция контроллера

public function saint_input()
{
    //Check if user is logged in, if they are not, send them to the login screen
    if($this->session->userdata('logged_in') == FALSE)
    {
        redirect('base/');
    }

    $this->load->library('form_validation');

    //load Saint model and get the nation list
    $this->load->model('saint_model');

    //Load the nation list
    $data['nationList'] = $this->saint_model->get_nations();

    if($this->form_validation->run('saint_input')==FALSE)
    {
        $this->load->view('std/top');
        $this->load->view('forms/saint_input', $data);
        $this->load->view('std/bottom');
    }
    else
    {
        //generate saintID
        $newSaintID = $this->saint_model->get_largest_saintID();
        $newSaintID++;

        $this->saint_model->input_saint($newSaintID);

        //if specified, record the ofRegion
        if($this->input->post('ofRegion') != NULL)
        {
            $this->saint_model->set_of_region($newSaintID);
        }

        //Send the user to this saint's single view page for review
        redirect('base/display_one_saint/'.$newSaintID);
    }
}

Большое спасибо за ваше время и работу!

1 Ответ

1 голос
/ 23 августа 2011

Это потому, что вы используете $ this в качестве массива для хранения данных перед их вставкой. $ это ссылка на объект в целом, и любые свойства, которые вы на него устанавливаете, сохранятся, пока они не будут сброшены Одним из решений является изменение массива для функции insert (), как показано ниже:

public function set_of_region($newSaintID)
{
    $ins_arr['saintID'] = $newSaintID;
    $ins_arr['ofRegion'] = $this->input->post('ofRegion');
    $this->db->insert('saint_of_region', $ins_arr);
}
...