我正在使用symfony 1.4和Doctrine使用遷移將數據上傳到數據庫。Doctrine Migration只從CSV上傳中加載一條記錄
我有一個CSV文件,我試圖批量加載到sfGuardUser表中,並且還將用戶ID與sfGuardUserGroup組ID相匹配,並將其加載到sf_guard_user表中。
當我運行遷移時,它只會從CSV中加載第一條記錄。加載的記錄格式正確(構建用戶名和日期)。
我在將代碼放入遷移之前測試了代碼,並且它正常工作。
我在這裏有語法錯誤,還是沒有設置正確循環?
也許我剛剛把它弄糟了。
PHP
public function up()
{
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "web/uploads/batchUpload.csv";
$file = fopen($csvfile,"r");
$size = filesize($csvfile);
$csvcontent = fread($file,$size);
fclose($file);
$lines = 0;
$queries = "";
$linearray = array();
foreach(explode($lineseparator,$csvcontent) as $line) {
//Clean it up
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);
$line = str_replace("'","\'",$line);
$linearray = explode($fieldseparator,$line);
//build username
if (!$linearray[3]) {
$username = $linearray[0];
$username = substr($linearray[0], 0, 1);
$username .= $linearray[1];
$username = strtolower($username);
$linearray[3] = $username;
}
//add sha1 algorithm
if (!$linearray[4]) {
$linearray[4] = "sha1";
}
//add is_active
if(!$linearray[7]) {
$linearray[7] = "1";
}
//add current date to login, created and updated
$now = getdate();
if ($now['mday'] < 10) {
$now['mday'] = str_pad($now['mday'], 2, "0", STR_PAD_LEFT);
}
if ($now['hours'] < 10) {
$now['hours'] = str_pad($now['hours'], 2, "0", STR_PAD_LEFT);
}
if ($now['minutes'] < 10) {
$now['minutes'] = str_pad($now['minutes'], 2, "0", STR_PAD_LEFT);
}
if ($now['seconds'] < 10) {
$now['seconds'] = str_pad($now['seconds'], 2, "0", STR_PAD_LEFT);
}
$linearray[10] = $now['year']. "-" .$now['mon'].
"-".$now['mday']." ".$now['hours'].":".$now['minutes'].":"
.$now['seconds'];
$linearray[11] = $now['year']. "-" .$now['mon'].
"-".$now['mday']. " ".$now['hours'].":".$now['minutes'].
":".$now['seconds'];
//load up sql
$linemysql = implode("','",$linearray);
$conn = Doctrine_Manager::getInstance()->connection();
$query = "INSERT INTO sf_guard_user VALUES ('', '$linemysql');";
//$queries .= $query . "\n";
$conn->execute($query);
//Add userID to group table
$conn = Doctrine_Manager::getInstance()->connection();
$getFirstID = Doctrine::getTable('sfGuardUser')->orderBy('id DESC')
->limit(1)->execute();
$id = $getFirstID['id'];
$query = "INSERT INTO sf_guard_user_group ('$id', 5, '$linearray[10]', '$linearray[11]');";
$conn->execute($query);
$query = "INSERT INTO sf_guard_user_group ('$id', 14, '$linearray[10]', '$linearray[11]');";
$conn->execute($query);
}// close foreach split
}
UPDATE
如果我刪除,我想獲得加載的最後一個ID,並與GuardUserGroup GROUP_ID匹配它的第二個查詢,然後它的作品。所以我想我們可以縮小它,並說我的錯誤是在//Add userID to group table
部分
複製/粘貼是正確的?因爲你有一個錯誤,'$ linearray [10] = $ now ['year']之後的行。 「 - 」。$ now ['mon']。(根據高亮代碼) – j0k 2012-07-18 14:51:20
這是一個複製錯誤,而不是實際的代碼。試圖使代碼更清晰一點,而不是一個長字符串。代碼已更新。謝謝 – 2012-07-18 14:59:34