0

我有一个包含以下字段的表单:

  • 电子邮件
  • 密码
  • 网址
  • 负责任的
  • pais(这是一个多选框)
  • 角色

我已经在 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 循环来解决这个问题,......那么解决它的方法是什么?

4

1 回答 1

0

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

要回答您的实际问题,尽管它应该看起来像这样:

   $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代码设置为取决于如何pais存储在数据库中(它是什么学说类型 - 数组、对象、字符串、M2m 关系?)。

于 2011-06-12T00:13:09.323 回答