Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用于更新用户表的条令查询_Php_Orm_Doctrine_Dql - Fatal编程技术网

Php 用于更新用户表的条令查询

Php 用于更新用户表的条令查询,php,orm,doctrine,dql,Php,Orm,Doctrine,Dql,我有一个包含以下字段的表单: 电子邮件 密码 网址 负责的 pais(这是一个多检查盒) 角色 我在Model_Users类中创建了这个方法 public function updateUser($user) { $q = Doctrine_Query::create() ->update('Model_Users usr'); //aca estaba el ; foreach ($user as $k => $v) { if

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

  • 电子邮件
  • 密码
  • 网址
  • 负责的
  • 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查询是
updateusers SET email=?,password=?,url=?,responsable=?,role=?其中(id=150)


我猜我不能使用foreach循环来获得正确的结果,。。。那么解决方法是什么呢?

如果您已经有一个
Model\u用户
实例可用,那么它应该用于您尝试更新的记录。否则,您只需使用查询。
updateUser
不属于
Model\u User
它属于
Model\u User\u表
,假设您实际为每个模型生成了条令表类(我个人推荐)

要回答您的实际问题,尽管它应该如下所示:

   $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关系?)。

当我这样做时,我会得到一个异常。例如,如果我更改电子邮件roberto@galan.com到roberto1@galan.com我收到
消息:未知组件别名roberto1
,这似乎表明
$k
实际上是与
$v
相反的值。。。你能发布你正在迭代的数据的
var\u dump
吗?另外,在查看了
Doctrine\u Query::update
的文档之后,您对
Doctrine\u Query::set
调用的初始签名似乎还不错。我想也许你的阵列一直都有问题。。。