我在symfony 1.4和Doctrine中使用迁移将数据上传到数据库。
我有一个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
}
更新
如果我删除第二个查询,我试图获取最后一个ID并将其与GuardUserGroup group_id匹配,那么它可以工作。所以我想我们可以缩小它并说我的错误在//Add userID to group table
部分
答案 0 :(得分: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);