Doctrine запрос на обновление таблицы пользователей - PullRequest
0 голосов
/ 12 июня 2011

У меня есть форма со следующими полями:

  • электронная почта
  • пароль
  • url
  • ответственно
  • 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 голосов
/ 12 июня 2011

Если у вас уже есть экземпляр Model_User, то это должно быть для записи, которую вы пытаетесь обновить. В противном случае вы просто используете запрос. updateUser не принадлежит Model_User, он принадлежит Model_User_Table, если вы на самом деле генерируете классы таблиц Doctrine для каждой модели (что я лично рекомендую).

Чтобы ответить на ваш реальный вопрос, он должен выглядеть примерно так:

   $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?).

...