使用活动记录将行移动到另一个表但使用特定列

时间:2014-06-28 06:27:34

标签: mysql codeigniter codeigniter-2

如果我从表中删除整行并将该行的两列值插入另一个表,那么我的模型函数结构应该是什么?我想使用有效记录。

function foo() 
{
    $this->db->truncate('to');
    $query = $this->db->get('from')->result(); // get first table
    foreach($query as $row)  // loop over results
    {
        $this->db->insert('to', $row); // insert each row to another table
    }
}

这是移动整行。我只想要两个特定的专栏。我该怎么办?

修改 这是正确的方式吗?

public function refund() 
{   
   $id = $this->uri->segment(4);

   $data['accounts'] = $this->accounts_model->get_accounts_data_by_id($id);

   foreach ($accounts as $row)
   {     
        $data = array(
            'barcode' => $row->barcode,
            'refunded_amount' => $row->refunded_amount,
           );
    }

    $this->db-insert('refund',$data);
}

2 个答案:

答案 0 :(得分:2)

循环内部:

$insert = array(
               "column_name_1" => $row->wanted_column_1,
               "column_name_2" => $row->wanted_column_2
                );

$this->db->insert('to', $insert);

编辑:

您的函数中未定义$ accounts。

尝试改为:

foreach ($data['accounts'] as $row)
{
     $data = array(
        'barcode' => $row->barcode,
        'refunded_amount' => $row->refunded_amount
        );

    $this->db->insert('refund',$data);
}

答案 1 :(得分:2)

<强>控制器:

class Controllername extends CI_Controller
{
    public function __construct()
    {
       parent::__construct();
       $this->load->model('your_model');
    }

    public function somename()
    {
       $id = 6;                                 // Row id to delete
       $this->your_model->delete_table1($id);

       $data = array(
                    array(
                     'col1' => 'val1',
                     'col2' => 'val2',
                     'col3' => 'val3',
                     ),
                    array(
                     'col1' => 'val1',
                     'col2' => 'val2',
                     'col3' => 'val3',
                     ),
                );
       $this->your_model->insert_table2($data);
    }
}


型号:

class Your_model extends CI_Model
{
    public function __construct()
    {
      parent::__construct();
      $this->db = $this->load->database('default',true);
    }

    public function delete_table1($id)
    {
        $this->db->delete('table1', array('id' => $id));
    }

    public function insert_table2($data)
    {
        $this->db->insert_batch('table2', $data);
    }
}


说明:

1)创建了一个函数,您可以在其中调用要从 $id 中删除的行的 table1 参数提供的模型函数。
2)第二个模型函数称为向 table2 插入2行,提供数组作为参数并使用 insert_batch() 活动记录功能。
3)在完成上述任务之前,不要忘记在Controller构造函数中 load the model