CI3 - 在insert_batch上捕获错误(唯一输入错误)

时间:2015-12-04 15:22:54

标签: codeigniter codeigniter-3

我的表格包含具有唯一索引的单元格( hashCheck )。是否可以使用 insert_batch ,捕获已经在db(重复项)中的所有条目,将它们放入数组并插入新记录?这是我目前使用的代码:

public function insertSerials($serials, $type)
    {
        $data = [];

        $now = date('Y-m-d H:i:s');

        foreach ($serials as $serial):
            $data[] = [
                'serial'     => $this->encryption->encrypt($serial),
                'hashCheck'  => hash('xxx', $serial),
                'type'       => $type,
                'date_added' => $now,
            ];
        endforeach;

        try {

            $this->db->insert_batch($this->_table_name, $data);

        } catch (Exception $e) {

            var_dump('<pre>', $e, '</pre>');

        }
    }

1 个答案:

答案 0 :(得分:0)

这是我能想到实现目标的唯一方式。也许不那么优雅,但它应该有效。

  public function insertSerials($serials, $type)
  {
    $data = [];
    $pre_existing = [];

    $now = date('Y-m-d H:i:s');

    foreach($serials as $serial)
    {
      $data[] = [
        'serial' => $this->encryption->encrypt($serial),
        'hashCheck' => hash('xxx', $serial),
        'type' => $type,
        'date_added' => $now,
      ];

      //test for existing hashCheck
      $query = $this->db->get_where($this->_table_name,
                                    array('hashCheck' => $data['hashCheck']));
      if($query->num_rows() > 0)
      {
        $pre_existing[] = $data;
      }
      else
      {
        $this->db->insert($this->_table_name, $data);
      }
    }
  }

db->insert()置于循环中会感觉很糟糕,除了insert_batch()最终会这样做。