В настоящее время у меня есть метод для публикации новых данных в базе данных, и он отлично работает, проблемы возникают, когда я пытаюсь добавить текущий идентификатор в таблицу ci_relationship.
Это мой метод:
public function add()
{
// Field Rules
$this->form_validation->set_rules('title', 'Title', 'trim|required|min_length[3]');
$this->form_validation->set_rules('body', 'Body', 'trim|required');
$this->form_validation->set_rules('status', 'Status', 'required');
$this->form_validation->set_rules('is_featured', 'Feature', 'required');
$this->form_validation->set_rules('is_commented', 'Comments', 'required');
$this->form_validation->set_rules('order', 'Order', 'integer');
if ($this->form_validation->run() == FALSE) {
// Select Categories
$categories_options = array();
$categories_options[0] = 'Select Categories';
$categories_list = $this->Terms_model->get_list();
foreach($categories_list as $cat){
$categories_options[$cat->term_id] = $cat->title;
}
$data['categories_options'] = $categories_options;
// Select Post Author ID and Name
$user_options = array();
$user_options[0] = 'Select Username ID';
$user_list = $this->User_model->get_list();
foreach($user_list as $username){
$user_options[$username->id] = $username->username;
}
$data['user_options'] = $user_options;
// Load template
$this->template->load('admin', 'default', 'posts/add', $data);
} else {
$slug = str_replace(' ', '-', $this->input->post('title'));
$slug = strtolower($slug);
// Upload Image
$config['upload_path'] = 'assets/img/posts/';
$config['allowed_types'] = 'gif|jpg|png';
$config['encrypt_name'] = TRUE;
$config['max_size'] = '2048';
$config['max_width'] = '2000';
$config['max_height'] = '2000';
$this->load->library('upload', $config);
$this->upload->initialize($config);
$file_name = 'post_image';
if (!$this->upload->do_upload($file_name)){
varDebug($this->upload->display_errors());
$file_name = 'assets/img/noimage.jpg';
} else {
$post_image = $this->upload->data('file_name');
}
// Page Data
$data = array(
'user_id' => $this->input->post('user_id'),
'slug' => $slug,
'title' => $this->input->post('title'),
'post_image' => $post_image,
'body' => $this->input->post('body'),
'status' => $this->input->post('status'),
'is_featured' => $this->input->post('is_featured'),
'is_commented' => $this->input->post('is_commented'),
'order' => $this->input->post('order'),
'type' => 'post',
);
// Insert Page
$this->Post_model->add($data);
$post_id = $this->db->insert_id();
// Activity Array
$data = array(
'resource_id' => $post_id,
'type' => 'post',
'action' => 'added',
'user_id' => $this->session->userdata('user_id'),
'message' => 'A new post was added (' . $data["title"] . ')'
);
// Insert Activity
$this->Activity_model->add($data);
// Insert Categories into CI_TERMS_TAXONOMY - term_taxonomy_id, term_id, type, body, parent_id, count
$categories = $this->Terms_model->get_list();
foreach ($categories as $cat) {
$data = array(
'term_taxonomy_id' => $this->db->insert_id(),
'term_id' => $cat->term_id,
'type' => 'category',
);
}
$this->Taxonomy_model->add($data);
// Insert Categories into CI_TERMS_RELATIONSHIP - post_id, term_taxonomy_id, term_order
$taxonomies = $this->Taxonomy_model->get_list();
$data = array();
foreach ($taxonomies as $taxonomy){
$data[] = array(
'post_id' => $post_id,
'term_taxonomy_id' => $taxonomy->term_taxonomy_id,
);
}
$this->db->insert_batch('ci_terms_relationship', $data);
// Set Message
$this->session->set_flashdata('success', 'Post has been added');
// Redirect
redirect('admin/posts');
}
}
В большей части кода все работает хорошо, я имею в виду, что могу вставить сообщение в его таблицу, затем я добавляю категории в таблицу ci_taxonomy, и все работает нормально. Проблема возникает, когда я пытаюсь добавить текущий идентификатор к post_id в CI_relationship Таблица.
Прямо сейчас это вызывает у меня только эту ошибку:
Duplicate entry '0-1' for key 'PRIMARY'
INSERT INTO 'ci_terms_relationship' ('post_id', 'term_taxonomy_id') VALUES (0,'1'), (0,'2'), (0,'3'), (0,'4'), (0,'5'), (0,'6'), (0,'7'), (0,'8'), (0,'9')
и, как говорится, это причина, потому что я не настроил столбец post_id как автоинкремент, но если я его изменю, будет невозможно передать текущий идентификатор сообщения, которое только что было добавлено в базу данных ... кто-нибудь знает способ исправить это или какой-нибудь совет?
Я надеюсь, что смогу прояснить это.
Заранее спасибо.
@Kevin, вы заметили, что ваш post_id равен 0? Одно предложение, вместо использования $ this-> db-> insert_id () в вашем контроллере, что опасно, пусть функции модели возвращают вместо этого идентификатор и используют возвращаемое значение.
Привет, @TimBrownlaw, извините за поздний ответ, но на самом деле я просто передал $this->db->insert_id() как переменную, и он начал давать мне те результаты, которые я хотел ... проверьте мою обновленную версию.
эй, @Vickel, извини за путаницу, я даже не был уверен, что кто-то вообще поймет вопрос (я действительно не приложил усилий, так как я торопился с реальными вещами), что просто заставило меня написать несколько абзацев без думаю об этом ... опять извините за путаницу .... и нет, я не пытался обновляться.
@kevin Я больше говорил о том, чтобы метод модели возвращал идентификатор. Id> 0 в случае успеха, id = 0 в случае неудачи. Итак, $ post_id = $ this-> Post_model-> add ($ data); где $ this-> db-> insert_id (); возвращается в случае успеха и 0 в случае неудачи. Храните данные БД внутри самого метода модели.
что-то вроде этого? (это мой метод добавления в модели) `public function add ($ data) {$ this-> db-> insert ($ this-> table, $ data); if ($ this-> db-> insert_id ()> 0) {вернуть $ this-> db-> insert_id (); } else {вернуть ложь; }} `
@kevin Так лучше ... в этом больше смысла?






Я не уверен, понимаю ли я ваш вопрос: если вы получаете сообщение об ошибке «дублирующаяся запись», это означает, что вы пытаетесь сделать INSERT на чем-то существующем. Вместо этого вам может понадобиться ОБНОВЛЕНИЕ, может ли это быть причиной?