0

重複の可能性:
Zend Framework で update-query に制限を追加するにはどうすればよいですか?

アップデートを行い、予防策として LIMIT 1 を配置したいと思います。これが私のコードです:

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

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

このクエリのどこに LIMIT を追加できますか?

(過去に質問されたようですが、誰かが答えてくれることを願っています)

4

3 に答える 3

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がない場合は新しい行が作成されることを意味します。

興味があれば、クラスを__構築する方法は次のとおりです。

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 に答える
1

うーん...私のZendは錆びていますが、過去に使用したと思います:http: //framework.zend.com/manual/en/zend.db.statement.htmlを使用してSQLを実行しました(selects/inserts/updates ) 通常の SQL ステートメントとして...

しかし、はい、古い情報と現在の情報はすべて正しいです - update() には「制限」を設定する機能がありません - DB を適切に設計し、そのようなテーブルに重複キーがないことを願うだけです!

また...「注文」は本当に悪いテーブル名です:)「注文」はMySQLの予約語です(実際、任意のDB!)。

于 2012-05-23T15:34:44.143 に答える
0

これを行う方法がないように見えるので、straingt クエリ機能を使用することにしました。WHERE からおかしな不要な値を削除するために、引き続き where built 機能を使用しました。

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