2010-10-23 55 views
2

在我的應用程序中,我有一個執行大約1000次的循環,其中我創建對象並保存它。這是我用數據填充數據庫的應用程序的一部分。通常情況下,這看起來像這樣:kohana orm3中的多插入

foreach(...){ 
    ... 
    try{ 
     $object = new Model_Whatever; 
     $object->whatever=$whatever; 
     $object->save();} 
    catch(Exception $e){ 
    ...} 
} 
        } 

這會產生1000個INSERT查詢。是否有可能以某種方式使kohana生產多個插頁。將其分成10個插入,每個插入100個數據集。這是可能的,如果是的話,那麼做法是什麼?

回答

11

雖然Kohana的ORM不支持多點插入,你仍然可以使用查詢生成器,如下所示:

$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(); 
} 
  • 你仍然需要將數據拆分起來所以上述不嘗試執行1000個插入查詢。
  • $數據假定與值對應於列

感謝賽的順序#kohana

+0

同樣的問題是如何實現「插入忽略」?在添加100條記錄的同時,其中一條記錄可能已經存在於數據庫中,如果是這樣,則添加所有100條記錄將被拒​​絕。 – SET 2010-10-30 23:42:19

0

PHP工作非常慢數組的數組時插入多陣列非常大(使得方法: :值有array_merge),以便更快捷:

class Database_Query_Builder_Bath_Insert 
    extends Database_Query_Builder_Insert{ 

    public static function doExecute($table, $data) { 
     $insertQuery = DB::insert($table, array_keys(current($data))); 

     $insertQuery->_values = $data; 

     $insertQuery->execute(); 
    } 
} 
0
call_user_func_array([$query, 'values'], $data);