1

如何根据_idmongodb for YII 进行更新?我尝试的是

    $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 文档所述,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 回答