0

私は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セクションにあると言うことができると思います

4

1 に答える 1

0

最新の ID レコードを取得するためにクエリを更新しました。主な問題は、クエリ内の $id がまだ配列であったことだと思います。私はこのようにそれを壊しました:

//Add userID to group table
$getFirstID = Doctrine::getTable('sfGuardUser')->createQuery()->select('MAX(id) as id')->fetchArray();
**$id = $getFirstID[0];
$id = $id['id'];**
$q = "INSERT INTO sf_guard_user_group VALUES ('$id', 5, '$linearray[10]', '$linearray[11]');";
$conn->execute($q);
$query = "INSERT INTO sf_guard_user_group VALUES ('$id', 14, '$linearray[10]', '$linearray[11]');";
$conn->execute($query);
于 2012-07-18T18:07:42.877 に答える