Yii2-如何为同一用户更新多条记录

Yii2-how to update multiple record for same user

这个问题可能被问过好几次,但我几乎都看过了,但仍然无法得到答案。

流程很简单。已发布用户 sims。发布模拟人生时,我会在名为 sim_balance 的 table 中插入针对该用户的模拟人生计数。

现在 SIM Return 有一个用例。在 return 模拟 sim 时,我正在更新上面的 table。如上图所示,可以看到总共有 8 个 sim 已发给同一用户,但日期时间不同。更新table的代码如下

模拟Return创造

$model = new SimReturn();
    $result = 0;
    $returned_by = 0;

    try{
        if (isset($_REQUEST['selected_imsi'])) {
            foreach ($_REQUEST['selected_imsi'] as $k => $v) {

                $count = $_REQUEST['selected_imsi'];
                $result = count($count);
                .
                .
                .
                $returned_by = $m->return_by;
                .
                .
                .
                if($m->save())
                {
                    // code...
                }

            }
            // below function call is updating the record
            SimBalance::update_Record($returned_by,$result);
            return $this->redirect(Url::toRoute('/simreturn'));
        }catch (Exception $ex)
         {
           {
            return $this->redirect(['index']);
           }
         }

update_Record

    public static function update_Record($user_id,$count){
    $sims = SimBalance::find()->where(['user_id'=>$user_id])->one();
    $sims->sims_count = $count;
    $sims->balance_date_time = date('Y-m-d h:i:s');
    return $sims->save();
    } 

现在,如果 SIMs return 编辑来自同一个 id,那么记录将得到完美更新。

但是当我尝试 return 来自不同 id 的 SIM 卡时,假设我有 returned 2 来自 id 12 来自 id 2 的模拟人生,因为它们都是相同的 user_id,所以两个 sims_count 都应该更新。但它只是更新了 id 1 的记录。

更新 1

根据给出的建议,现在我通过查看此 link 使用 update()

 public static function update_Record($user_id,$count){
     $sims = SimBalance::find()->where(['user_id'=>$user_id])->all();
    foreach ($sims as $sim)
    {
        $model = SimBalance::find()->where(['id'=>$sim->id])->one();
        $model->sims_count = $count;
        $model->balance_date_time = date('Y-m-d h:i:s');
        return $model->save();
    }

}

但是,它仍然对我不起作用,否则它会增加一个计数。

如何同时更新 ids 的记录?

任何帮助将不胜感激。

这里的问题是您要返回 $model->update()。这意味着 foreach 将在第一个循环中退出。

改用:

public static function update_Record($user_id,$count){
    $sims = SimBalance::find()->where(['user_id'=>$user_id])->all();

    foreach ($sims as $model)
    {
        $model->sims_count = $count;
        $model->balance_date_time = date('Y-m-d h:i:s');
        $model->update();
    }

return $sims;
}

问题是您需要在 sim_balance table 中针对用户创建一条记录,因为您将无法跟踪针对给定模拟人生减少哪一行,因为例如,你得到 2 个 id 12 属于同一个用户的模拟人生,现在你如何确定你有 decrement-only 这 2 条记录之一或两者,保持在一条针对用户的记录中进行计数,并通过确定模拟人生属于该用户来减少它