Doctrine查询更新用户表

时间:2011-06-11 23:42:56

标签: php orm doctrine dql

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

  • 电子邮件
  • 密码
  • URL
  • RESPONSABLE
  • 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循环来做到这一点,...那么它会有什么方法呢?

1 个答案:

答案 0 :(得分: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代码是goign依赖于pais在DB中的存储方式(它是什么学说类型 - 数组,对象,字符串,M2m关系?)。