我想进行更新并将 LIMIT 1 作为预防措施。这是我的代码:
$vals = array();
$vals['status'] = 'closed';
$where = $write->quoteInto('id =?', $orderID);
$write->update("order", $vals ,$where);
我在哪里可以在此查询中添加 LIMIT?
(看起来过去有人问过,但我希望有人能回答)
我想进行更新并将 LIMIT 1 作为预防措施。这是我的代码:
$vals = array();
$vals['status'] = 'closed';
$where = $write->quoteInto('id =?', $orderID);
$write->update("order", $vals ,$where);
我在哪里可以在此查询中添加 LIMIT?
(看起来过去有人问过,但我希望有人能回答)
嗯...我的 Zend 生锈了,但我想过去我用过:使用http://framework.zend.com/manual/en/zend.db.statement.html执行 SQL (selects/inserts/updates ) 作为普通的 sql 语句...
但是是的,所有旧的和当前的信息都是正确的——update() 无法设置“限制”——你只需要希望你正确设计了数据库并且这样的表不会有重复的键!
另外......'order'是一个非常糟糕的表名:),'order'是MySQL中的保留字(实际上是任何数据库!)。
看起来您正在使用 Zend_Db_Adapter 来执行您的查询,所以我不确定您是否可以做我所做的事情,不管怎样。
我通常使用 Zend_Db_Table_Row save() 方法来插入和更新记录,但是我也使用 DbTable 模型来提供对 Table 和 Table_Row 抽象 api 的访问。
public function save(Music_Model_Artist $artist) {
//if id is not null
if (!is_null($artist->id)) {
//find row, uses fetchRow() so will return NULL if not found
$row = $this->findById($artist->id);
$row->id = $artist->id;
} else {
//if ID is null create new row
$row = $this->_getGateway()->createRow();
}
//assign data to row
$row->name = $artist->name;
//save new row or update
$row->save();
//return the row, in case I need it for something else
return $row;
}
这相当于如果我在数据数组(或者在这种情况下是实体对象)中包含和 ID,则将更新该行,如果对象中没有 ID,则将创建一个新行。
如果您对我如何 __construct 课程感到好奇:
public function __construct(Zend_Db_Table_Abstract $tableGateway = NULL) {
//pass in concrete DbTable Model, parent alts to using table name string to construct class
$this->_tableGateway = new Application_Model_DbTable_Artist();
parent::__construct($tableGateway);
}
希望这能提供一些帮助。
好吧,看起来没有办法做到这一点,我只是决定使用 straingt 查询功能。我仍然使用 where built 功能,从 WHERE 中删除任何有趣的不需要的值。
$where = $write->quoteInto('id =?', $order_id);
$write->query("UPDATE orders SET status = 'closed' WHERE $where LIMIT 1");