0

可能重复:
如何在 Zend Framework 中为更新查询添加限制?

我想进行更新并将 LIMIT 1 作为预防措施。这是我的代码:

$vals = array();
$vals['status'] = 'closed';
$where = $write->quoteInto('id =?', $orderID);

$write->update("order", $vals ,$where);

我在哪里可以在此查询中添加 LIMIT?

(看起来过去有人问过,但我希望有人能回答)

4

3 回答 3

1

嗯...我的 Zend 生锈了,但我想过去我用过:使用http://framework.zend.com/manual/en/zend.db.statement.html执行 SQL (selects/inserts/updates ) 作为普通的 sql 语句...

但是是的,所有旧的和当前的信息都是正确的——update() 无法设置“限制”——你只需要希望你正确设计了数据库并且这样的表不会有重复的键!

另外......'order'是一个非常糟糕的表名:),'order'是MySQL中的保留字(实际上是任何数据库!)。

于 2012-05-23T15:34:44.143 回答
1

看起来您正在使用 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);
    }

希望这能提供一些帮助。

于 2012-05-24T10:10:47.793 回答
0

好吧,看起来没有办法做到这一点,我只是决定使用 straingt 查询功能。我仍然使用 where built 功能,从 WHERE 中删除任何有趣的不需要的值。

$where = $write->quoteInto('id =?', $order_id);
$write->query("UPDATE orders SET status = 'closed' WHERE $where LIMIT 1");
于 2012-05-23T15:52:46.103 回答