2016-11-18 2 views
-1

Я в основном загружаю файл для загрузки для пользователей с их информацией о моем приложении, которое разработано на codeigniter. Он получает одну строку из файла и обновляет таблицу, если запись не существует.Перейти к следующему элементу в цикле foreach, если запись уже находится в таблице

Но я хочу сначала проверить, находится ли запись уже в базе данных или нет. В противном случае он должен перейти к следующему элементу.

Следующий мой код модели.

function upload($file_name){ 
$file = './uploads/'.$file_name; 


$this->load->library('excel'); 

$objPHPExcel = PHPExcel_IOFactory::load($file); 

$cell_collection = $objPHPExcel->getActiveSheet()->getCellCollection(); 

foreach ($cell_collection as $cell) { 
    $column = $objPHPExcel->getActiveSheet()->getCell($cell)->getColumn(); 
    $row = $objPHPExcel->getActiveSheet()->getCell($cell)->getRow(); 
    $data_value = $objPHPExcel->getActiveSheet()->getCell($cell)->getValue(); 


    if ($row == 1) { 
     $header[$row][$column] = $data_value; 
    } else { 
     $arr_data[$row][$column] = $data_value; 
    } 
} 
//send the data in an array format 
$data['header'] = $header; 
$data['values'] = $arr_data; 
foreach ($arr_data as $q){ 
$data = array(
    't_ref'=>$q['A'], 
    't_name'=>ucwords($q['B']), 
    't_cnic'=>$q['C'], 
    't_dept'=>$q['D'], 
    'status'=>$q['E'] 
    ); 
$this->db->select('t_cnic'); 
$this->db->where('t_cnic',$q['C']); 
$this->db->from('tbl_users'); 
$query = $this->db->get(); 
if($query->num_rows()>0){ 
break; 
}else{ 
$this->db->insert('tbl_users',$data); 
} 
} 
$msg = "Successfully Added"; 
return $msg; 
} 

(Перерыв не движется к следующему элементу Ofcourse)

Как я перейти к следующему элементу, а не просто остановить петлю всякий раз, когда он находит запись с CNIC уже существующий в таблице.

+1

Обычно «продолжают»; ? – Roger

+0

Не знаете, как изменить свой запрос в codeignitor, но вы можете использовать ON DUPLICATE KEY UPDATE/IGNORE, чтобы либо обновить существующую строку новыми значениями (даже если они совпадают с старыми значениями), либо просто проигнорировать обновление и перейти к следующему запись .. Это требует, чтобы ваша таблица имела хотя бы один уникальный индекс или индекс столбца 2, который при объединении должен быть уникальным. –

ответ

2

Вам не нужно ломать, или продолжить здесь, просто убираю логика:

if ($query->num_rows()==0) { 
    $this->db->insert('tbl_users',$data); 
} 
2

Заменить break с continue:

if($query->num_rows()>0) { 
    continue; 
} else { 

продолжает используется в сквозных структуры, чтобы пропустить остаток текущей итерации цикла и продолжить выполнение при оценке состояния, а затем начала следующей итерации.

0

Почему вы не просто делать это

if($query->num_rows() === 0){ 
     $this->db->insert('tbl_users',$data); 
     $msg = "Successfully Added"; 
    } else { 
     $msg = "File Already exist"; 
    } 

    return $msg; 
Смежные вопросы