2011-06-11 28 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