【问题标题】:Codeigniter Inserting Multiple Queries to tableCodeigniter 向表中插入多个查询
【发布时间】:2013-02-20 20:55:59
【问题描述】:

我目前正在为库存跟踪系统创建一个使用 codeigniter 的应用程序。我创建了一种创建/显示/更新/删除事件的方法。我遇到的问题是库存表。我正在显示一个表格,每一行都是一个独特的产品。我希望能够同时更新数据库库存表行。我正在我的模型中尝试这样的事情:

function insert_inventory($data){

    foreach($_POST['product'] as $product){
        $this->db->insert('inventory', $data);
    }
}

这是控制器:

function add_show_inventory() {
    $data['products']=$this->product->get_products();

    $this->form_validation->set_rules('skuID', 'skuID', 'required');
    $this->form_validation->set_rules('brought-in', '"Brought In"', 'required');
    $this->form_validation->set_rules('finished-with', '"Finished With"', 'required');
    $this->form_validation->set_rules('deliveries', 'Deliveries');
    $this->form_validation->set_error_delimiters('<div class="error-module">', '</div>');

    if($this->form_validation->run()== FALSE){
        $this->load->view('header');
        $this->load->view('menu');
        $this->load->view('inventory/show-add-inventory', $data);
        $this->load->view('footer');
    } else {
        if($_POST){

            //$data['show']=$this->show->get_show();

            $data=array(
                'skuID'=>$_POST['skuID'],
                'product'=>$_POST['product'],
                'deliveries'=>$_POST['deliveries'],
                'brought-in' =>$_POST['brought-in'],
                'finished-with'=>$_POST['finished-with'],
            );

            $this->inventory->insert_inventory($data);
            redirect(base_url().'shows/');
        }
    }
}

关于如何同时插入多行的任何想法?任何帮助表示赞赏。

【问题讨论】:

  • 你的控制器逻辑只抓取一行数据。它怎么会不止一个?可以举个例子吗?
  • 贴一个具体的例子?
  • 餐桌清单是什么样的?
  • @TommyAdey skuID int(8) NOT NULL, inv-in int(8) NOT NULL, inv-out int(8) NOT NULL, deliveries int(8) NOT NULL, brought-in int(8) NOT NULL, add-1 int(8) NOT NULL, add-2 int(8) NOT NULL, total-at-table int(8) NOT NULL, finished-with int(8) NOT NULL, sold int(8) NOT NULL, time-stamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, show-date varchar(50) NOT NULL, showID varchar(50) NOT NULL

标签: php mysql database codeigniter


【解决方案1】:

为此优化您的代码:$this->db->insert_batch();

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data); 

【讨论】:

  • 我了解 insert_batch 函数应该如何工作。但是如何让它与动态/未知数量的产品一起使用。我有未定义数量的产品,所以我无法对每个数组进行硬编码,这就是我希望 foreach 循环能够工作的原因。
  • 好吧,你必须使用你在每个函数调用中得到的东西,除非你想做一些事情,比如将数据存储在会话中,然后在达到一定数量时插入一个批次产品...但我仍然建议您使用每个函数调用一个产品/批次...或以不同的方式优化整个应用程序。关于你的 foreach 循环 - 你没有在任何地方引用 product 变量......你可以使用 foreach 来构建你将用于批量插入的数组。
  • @TylerCraft 不是关于未定义的产品数量,而是关于已定义字段的数量,如果您知道用户只会输入 5 个字段,那没问题,只需制作类似于数组然后使用 insert_batch
  • @tomexsans 如果我知道表格的列数,这怎么能行……只是不知道要插入的行数……
猜你喜欢
  • 2015-01-23
  • 1970-01-01
  • 2019-07-31
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
相关资源
最近更新 更多