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(这是一个多检查盒)
- 角色
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
调用的初始签名似乎还不错。我想也许你的阵列一直都有问题。。。