插入,更新,删除 - >规范化&代码点火器

时间:2013-05-25 09:42:52

标签: php mysql codeigniter

使用表格和规范化

我有三张桌子

-----------
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'].'&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 */
  }

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

如果您需要使用新值更新articles_categories表,则有一些方法可以执行此操作。但我的提议是通过文章ID删除所有关系,然后再次插入它们。这是更新关系表的最佳方式。为此,您可以拆分插入模型;

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