2013-05-25 4 views
1

Работа с таблицами и нормализацииInsert, Update, Delete -> Нормирование и код воспламенитель

У меня есть три таблицы

----------- 
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 

Как добиться успеха с помощью воспламенителя кода. До сих пор я уже пробовал вот так

View | 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'].'&nbsp'; 
     } 
?> 

    <?php 
     echo form_submit('Submit',"Submit"); 
     echo form_close(); 
    ?> 

Контроллер | articles.php

function insert() 
{ 
    $this->articles_model->save(); 

} 

Модель | articles_model.php

Thomas Clayson уже справляется с проблемой вставок.

Saving articles and related categories according to normalization

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 */ 
    } 

Спасибо за помощь

+0

Не уверен, что вы здесь задаете ... Как сделать обновления (удалить неиспользуемые, добавить новые, ...)? Что вас блокирует? – Lepidosteus

+0

нам также необходимо обновить категории. Две таблицы одновременно. «таблица статей» прекрасна, но я не могу обновить таблицу отношений «articles_categories» –

ответ

3

Если вам нужно для обновления таблицы 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 */ 
+0

хорошая идея, я буду тестировать и возвращаться как можно скорее. –

+0

получил это благодаря работе. Sepearte 'articles_categories' теперь привязан к «категориям» в форме обновления. : | –