Работа с таблицами и нормализация
У меня три таблицы
----------- articles ----------- id int(11) auto_increment title varchar(100) ----------- categories ---------- id int(11) auto_increment title varchar(100) ------------------- articles_categories -------------------- articles_id int(11) categories_id int(11)
Я хочу сохранить его в соответствии с правилом нормализации, чтобы достичь этого
articles_id | categories_id 1 1 1 2 1 3
Как я могу добиться с помощью воспламенения кода. До сих пор я уже пробовал это
Просмотр | create.php
<?php echo form_input('title','','id="title_input"'); ?><br> Category <?php foreach ($categories as $c) { echo '<input type="checkbox" id="categories[]" name="categories[]" value="'.$c['id'].'">'; echo $c['title'].' '; } ?> <?php echo form_submit('Submit',"Submit"); echo form_close(); ?>
Контроллер | articles.php
function insert() { $this->articles_model->save(); }
Модель | articles_model.php
Томас Клейсон уже помогает вставить вопрос.
Сохранение статей и связанных с ними категорий в соответствии с нормализацией
function insert() { $title = $this->input->post('title'); $data = array('title' => $title); $this->db->insert('articles', $data); $article_id = $this->db->insert_id(); $categories = $this->input->post('categories'); $data = array(); foreach($categories as $category_id) { $data[] = array( 'articles_id' => $article_id, 'categories_id' => $caregory_id ); } $this->db->insert_batch('articles_categories', $data); }
Это метод удаления
function delete($id) { $this->db->delete('articles',array('id'=>$id)); }
Я теперь застрял с методом обновления
function update($id) { $id= $this->input->post('id'); $title=$this->input->post('title'); $categories = $_POST['categories']; $data=array( 'title'=>$title, ); $this->db->where('id', $id); $this->db->update('articles',$data); /*can update articles table now */ /* here is the missing idea and what I had done so far*/ $bb = array(); foreach($categories as $categories_id ) { $bb[] = array( 'articles_id' => $id , 'categories_id' =>$categories_id ); } $this->db->update('articles_categories',$bb); /* end of missing idea */ } function select($id) { $query=$this->db->get_where('articles',array('slug'=>$slug)); return $query->row_array(); /*missing idea to retieve categories */ } function select_categories() { /*missing idea to retieve categories */ }
Спасибо за помощь
Если вам нужно обновить таблицу articles_categories новыми значениями, есть несколько способов сделать это. Но мое предложение удаляет все отношения по идентификатору статьи, а затем вставляет их снова. Это лучший способ обновить таблицу отношений. Для этого вы можете разделить модель вставки;
function insert() { $title = $this->input->post('title'); $data = array('title' => $title); $this->db->insert('articles', $data); $article_id = $this->db->insert_id(); $categories = $this->input->post('categories'); $this->insert_relations($article_id); } function insert_relations($article_id,$categories) { $data = array(); foreach($categories as $category_id) { $data[] = array( 'articles_id' => $article_id, 'categories_id' => $caregory_id ); } $this->db->insert_batch('articles_categories', $data); }
и вам нужно удалить модель для отношений;
function delete_relations($articles_id) { $this->db->delete('articles_categories',array('id'=>$articles_id)); }
и вам нужно изменить свою недостающую часть;
/* here is the missing idea and what I had done so far*/ $this->delete_relations($id); $this->insert_relations($id,$categories); /* end of missing idea */