私はsymfony1.4とDoctrineで、移行を使用してデータをデータベースにアップロードしています。
sfGuardUserテーブルにバッチロードしようとしているCSVファイルがあり、ユーザー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
}
アップデート
最後のIDをロードしようとしている2番目のクエリを削除し、それをGuardUserGroup group_idと一致させると、機能します。だから私たちはそれを絞り込んで、私のエラーは//Add userID to group table
セクションにあると言うことができると思います