这个问题可能会被问过几次,但我几乎看到了所有这些问题,但仍无法得到答案。
流程很简单。已向用户发出sims
。当发出sims时,我在名为sim_balance
的表中插入针对该用户的sims计数。
现在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();
}
}
的记录?
任何帮助都将受到高度赞赏。
答案 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个标识为1
和2
的模拟器,您将如何确定您只减少了这2条记录中的一条或两条记录,将计数器保存在一条记录中用户并通过确定属于该用户的SIM卡来减少它