2014-04-09 5 views
1

"삽입 무시"를 구현하는 방법은 무엇입니까? kohana orm 사용하기 여러 개의 레코드를 추가하는 동안, 아래의 코드를 사용하여 데이터베이스에 거의 존재하지 않는 레코드가 100 개나되는 레코드는 모두 거부됩니다.Kohana - 중복 무시로 레코드 삽입

$query = DB::insert('tablename', array('column1', 'column2','column3')); 

foreach ($data as $d) { 
    $query->values($d); 
} 
try { 
    $result = $query->execute(); 
} catch (Database_Exception $e) { 
    echo $e->getMessage(); 
} 

는 UPDATE : 여기 이는, 원시 쿼리를 작성하는 것은 불가능 시도되는 쿼리 빌더로

$Xtransactions = "INSERT IGNORE INTO `tablename` (`tid`, `tdate`, `appid`, 
               `userid`, `user_ip`) VALUES"; 

foreach ($objSas->trecord as $trow) {      
    $Xtransactions .= "(".$trow->tid.",'". 
    date('Y-m-d H:i:s', strtotime($trow->tdate))."',". 
    $trow->userid.",". 
    $trow->Xnumber.",'". 
    $trow->ip."'),"; 
} 
    $Xtransactions = substr($Xtransactions , 0, -1);       
try {      
     DB::query(Database::INSERT, $Xtransactions)->execute(); 
} catch (Database_Exception $e) { 
     echo $e->getMessage(); 
} 

답변

2

, 내가이 어떻게했는지, 내가 여러 레코드를 삽입해야합니다.

DB::query(Database::INSERT, 'INSERT IGNORE INTO table VALUES (...)')->execute(); 
1

나는 보통 예를 들어, 정적 헬퍼 클래스 이러한 변경을 수집

<?php defined('SYSPATH') or die('No direct script access.'); 

class Helper_DB_Query{ 
/** 
* @param Database_Query_Builder_Insert $insert query thant need to be converted 
* @return Database_Query converted query 
*/ 
    public static function insert_to_insert_ignore(Database_Query_Builder_Insert $insert){ 

     $insert = (string) $insert; 

     $query = preg_replace("/^INSERT(.*)$/", "INSERT IGNORE $1", $insert); 

     return DB::query(Database::INSERT, $query); 

    } 



}