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 1
和 2
来自 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 1
和 2
属于同一个用户的模拟人生,现在你如何确定你有 decrement-only 这 2 条记录之一或两者,保持在一条针对用户的记录中进行计数,并通过确定模拟人生属于该用户来减少它
这个问题可能被问过好几次,但我几乎都看过了,但仍然无法得到答案。
流程很简单。已发布用户 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 1
和 2
来自 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 1
和 2
属于同一个用户的模拟人生,现在你如何确定你有 decrement-only 这 2 条记录之一或两者,保持在一条针对用户的记录中进行计数,并通过确定模拟人生属于该用户来减少它