2011-06-11 59 views
0

我有以下字段的格式:主义查询来更新用户表

  • 电子邮件
  • 密码
  • 网址
  • RESPONSABLE
  • 派斯(这是一个multicheckbox)
  • 角色

我已经创建了Model_Users类

public function updateUser($user) { 
    $q = Doctrine_Query::create() 
     ->update('Model_Users usr'); //aca estaba el ; 

    foreach ($user as $k => $v) { 
     if ($k == 'pais' || $k == 'id') { 
      continue; 
     } else { 
      $q->set("usr.$k", '?', $v); 
      //echo "Key: $k => Value: $v ||"; 
     } 
    } 

    $q->where("usr.id=$user[id]"); 
    $q->execute(); 
} 

内这种方法的问题是,这是不是真的更新...如果我这样做呼应$q->getSqlQuery() SQL查询我得到的是UPDATE users SET email = ?, password = ?, url = ?, responsable = ?, role = ? WHERE (id = 150)

我猜我不能使用foreach循环来获得这个权利......那么围绕它的方式是什么?

回答

0

如果您已有一个Model_User实例可用,那么它应该用于您尝试更新的记录。否则,您只需使用查询。 updateUser不属于Model_User它属于Model_User_Table假设您实际上为每个模型(我个人建议)生成Doctrine表类。

为了回答您的实际问题,虽然它shoudl是这个样子:

$q = Doctrine_Query::create() 
     ->update('Model_Users'); 

    foreach ($user as $k => $v) { 
     if ($k == 'pais' || $k == 'id') { 
      continue; 
     } else { 
      $q->set($k, $v); 
     } 
    } 

    $q->where("usr.id = ?", $user[id]); 
    $q->execute(); 

至于设置pais该代码goign依赖于(什么主义类型是它是如何pais存储在数据库 - 阵列,对象,字符串,M2m关系?)。

+0

当我这样做,我得到一个异常。例如,如果我将电子邮件[email protected]更改为[email protected],我会得到'消息:未知组件别名roberto1' – 2011-06-13 16:50:32

+0

这似乎表明'$ k'实际上是与$ v'相对的值...你可以发布你迭代的数据的var_dump吗?在查看Doctrine_Query :: update的文档之后,看起来您对Doctrine_Query :: set调用的初始签名就好了。我想也许它一直是你阵列的问题...... – prodigitalson 2011-06-13 19:22:27