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

时间:2018-03-20 05:14:31

标签: mysql activerecord yii2 yii2-advanced-app

这个问题可能会被问过几次,但我几乎看到了所有这些问题,但仍无法得到答案。

流程很简单。已向用户发出sims。当发出sims时,我在名为sim_balance的表中插入针对该用户的sims计数。

enter image description here

现在SIM Return有一个用例。在返回sim时,我正在更新上表。如上图所示,可以看到已经向同一用户发出了总共8个sim,但具有不同的日期时间。更新表的代码如下

Sim Return Create

$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来自同一id,则记录会完美更新。

但是,当我尝试从不同的id返回SIM卡时,请假设我已从ID 2返回1个SIM卡,并从ID {{1}返回2个SIM卡因为它们都是相同的2所以user_id都应该更新。但它只是更新了身份sims_count的记录。

更新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(); } } 的记录?

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

这里的问题是您返回$ 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;
}

答案 1 :(得分:1)

问题是您需要在sim_balance表中针对用户创建一条记录,因为您无法跟踪哪一行减少给定的SIM卡,例如您正在获取现在,属于同一用户的2个标识为12的模拟器,您将如何确定您只减少了这2条记录中的一条或两条记录,将计数器保存在一条记录中用户并通过确定属于该用户的SIM卡来减少它