当有两个子句时如何使用zend_db_select进行更新

时间:2013-05-16 08:17:02

标签: zend-framework zend-db

我希望在满足2个条件时更新表中的条目。

我有这个陈述,但它仅适用于条件

$this->dbo->update('mytable', $data, $this->dbo->quoteInto('id= ?', $id));

我不想只检查“id”的位置,而是想检查用户ID ..

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

与此类似的东西应该作为$ where参数接受并解析数组,在_whereExpr()中引用Zend_Db_Adapter_Abstract方法,以获取有关如何处理$where arg的代码:

$this->dbo->update('mytable', $data, array('id= ?'=> $id, 'user_id=?'=>$userId));

我建议你可能希望改变你的方法并使用Zend_Db_Table_Row的save()方法而不是更新。这是一个例子。

 public function saveUser($id, array $userData, $userId = null)
    {
        //$this->getDbAdapter is a placeholder for your choice of db adapters, I suggest a DbTable model that extends Zend_Db_Table_Abstract
        $select = $this->getDbAdapter()->select();
        //if userId is not null build a where clause
        if (!is_null($userId)) {          
            $select->where('user_id = ?', $userId);
        }
        //build where clause for primary key, two where() in select() will be 'AND' use orWhere() for 'OR'
        $select->where('id = ?', $id);
        //fetch the row you wish to alter
        $row = $this->getDbAdapter()->fetchRow($select);
        //assign the data to the row, you can update any or all columns
        $row->username = $userData[username];
        $row->user_id = $userData[user_id];
        //ect...

        //save the new data to the row, will only update changed coluns
        $row->save();
        //return the whole for use in other ways, save() typically only returnbs the primary key.
        return $row;
    }

是的,这种方法有点冗长,也许触摸更复杂。但是,当你开始遇到'INSERT'和'UPDATE'的限制时,save()可以提供一些有用的功能。