0

私はコードをもっている

$command = Yii::app()->db->createCommand()
        ->update(
            'queue q',
            array('i.status_id' => $status_id)
        )
        ->join('item i', 'q.item_id = i.item_id')
        ->where('IN', 'queue_id', $ids);

$ command-> buildQuery()を呼び出した後、エラーが発生します。

CDbCommandはSQLステートメントの実行に失敗しました:無効なパラメーター番号:パラメーターが定義されていません。実行されたSQLステートメントは次のとおりですqueue q。UPDATESET istatus_id=:i.status_id

印象は、joinコマンドとwhereコマンドが表示されないことです。何が問題なの?

4

4 に答える 4

1

あなたのコードは最新の Yii バージョンで有効です。この MySQL 固有の機能は 1.1.14 で追加されました: https://github.com/yiisoft/yii/commit/ed49b77ca059c0895be17df5813ee1e83d4c916d

于 2013-10-21T11:21:41.450 に答える
0

パラメータをバインドする必要があります。

$command = Yii::app()->db->createCommand()
    ->update(
        'queue q',
        array('i.status_id' => ':status_id'),
        array('in', 'queue_id', $ids),
        array(':status_id' => $status_id),
    )
    ->join('item i', 'q.item_id = i.item_id');
于 2012-05-14T08:51:40.103 に答える
0

私のプロジェクトでこの問題に何度か遭遇したので、CDbCriteria を使用して次の Yii 回避策を考え出しました。

あなたの例に適用すると、私のコードは次のようになります(あなたの構造を少し推測してください):

$ids = array(1,2,3,4,5);
$criteria = new CDbCriteria();
$criteria->addInCondition('i.queue_id',$ids);

$sql = '
  UPDATE queue q
    JOIN item i 
      ON q.item_id = i.item_id
     SET i.status_id = :status
   WHERE '.$criteria->condition;

$command = Yii::app()->db->createCommand($sql);
$command->bindValue('status',$status);
$command->bindValues($criteria->params);
$rows = $command->execute();
于 2014-03-28T11:35:03.083 に答える
0

where 句は、このように update() 関数にある必要があります

 Yii::app()->db->createCommand()
        ->update(
            'queue q',
            array('i.status_id' => $status_id),array('in', 'queue_id', $ids)
        );

また、JOIN 部分に関しては、https://github.com/yiisoft/yii/issues/124に未解決のバグがあります(よくわかりません。間違っている場合は訂正してください)。回避策があれば教えてください。

于 2012-05-14T09:15:36.520 に答える