1

_idYII の mongodb に基づいて更新するにはどうすればよいですか? 私が試したのは

    $model= new MongoUrls();
      $criteria = new EMongoCriteria;
      $criteria->userid('==', $userid);
      $criteria->screenshot_path('!=', null);
      $criteria->screenshot_uploaded('!=', 1);
      $availablescreenshots=$model-> findAll($criteria);

      if(count($availablescreenshots)>0){
        foreach($availablescreenshots as $obj1){
             $path_parts = pathinfo($obj1->screenshot_path);

             if($social->upload($obj1->screenshot_path, 'test',$path_parts['basename']))          {

     $model->updateAll(array('_id'=>$obj1->_id  ), array('screenshot_uploaded'=>1)  );

} 
                            }

                        }

しかし"The EMongoDocument cannot be updated because it is new."、Yii でエラーが表示されます。

_id同じ値に一致するドキュメントを更新したい

4

3 に答える 3

1

yii mongosuite docs が述べているように、updateAll は通常の更新とは少し使い方が異なります。また、ループ内で updateAll を使用しており、条件として単一の ID を渡しますが、これはあまり意味がありません。updateAll を使用すると、条件を使用してモデルを更新できます。ここでは、次のような部分更新を使用する必要があります。

// _id is already set because it comes from db
$obj1->screenshot_uploaded = 1;
// First param to set fields which should be updated
// Set second param to true, to make partial update
$obj1->update(array('screenshot_uploaded'), true);
于 2013-06-17T11:12:28.620 に答える
1

一般的なクエリを実行するのではなく、現在アクティブなレコードを更新することに関連している$model->updateAll()ため、使用している拡張機能が実際に必要であると仮定するのが正しい場合。update()少しややこしいですが、これが Yii の仕組みです。

于 2013-06-17T07:06:12.437 に答える
0

私のために働いた方法は

$modifier = new EMongoModifier();
$modifier->addModifier('screenshot_uploaded', 'set', '1');
$criteria = new EMongoCriteria();
$criteria->addCond('_id','==', $obj1->_id   );           
$model->updateAll($modifier,$criteria   );
于 2013-06-18T05:06:15.687 に答える