【问题标题】:how to create multiple foreach with one save?如何一次保存创建多个foreach?
【发布时间】:2017-11-14 04:56:13
【问题描述】:

我在控制器功能框架yii中创建了多个foreach并创建了一个存储,但是数据只存储了最后一个foreach数据,如何解决master?

$arrItems = array();
$data = LineTransaksi::model()->findAllByAttributes(array('id_header'=>$id));
foreach ($_POST['jml_kembali_bgs'] as $q3k => $q3v)
{
    if(isset($data[$q3k]))
    {
        $tabdata=LineTransaksi::model()->findByPk($data[$q3k]->id_line);  
    }
    else
    {
        $tabdata=new LineTransaksi;
    }
    $tabdata->jml_kembali_bgs=$q3v;
    $arrItems[] = $tabdata;
}
foreach ($_POST['jml_kembali_retak'] as $q3r => $q3t)
{
    if(isset($data[$q3r]))
    {
        $tabdata=LineTransaksi::model()->findByPk($data[$q3r]->id_line);  
    }
    else
    {
        $tabdata=new LineTransaksi;
    }
    $tabdata->jml_kembali_retak=$q3t;
    $tabdata->last_updated_date=new CDbExpression('now()');
    $arrItems[] = $tabdata;
}
foreach ($arrItems as $object)
{
    $object->save();
}

感谢您的关注。

【问题讨论】:

  • 为什么不使用$tabdata->save() 而没有最后一个foreach
  • 使用 $arrItems.push($tabdata);
  • 因为 if "$tabdata-> save();"两次,功能 aftersave 重复两次。 @MilanChheda

标签: php arrays foreach yii multiple-columns


【解决方案1】:

每次您使用$arrItems[] = $tabdata; 时,您都会将$arrItems[] 数组替换为$tabdata 中的新值。

您应该改用array_push($arrItems, $tabdata);

所以你的代码应该是这样的:

$arrItems = array();
foreach ($_POST['jml_kembali_bgs'] as $q3k => $q3v)
{
if(isset($data[$q3k]))
{
    $tabdata=LineTransaksi::model()->findByPk($data[$q3k]->id_line);  
}
else
{
    $tabdata=new LineTransaksi;
}
$tabdata->jml_kembali_bgs=$q3v;
array_push($arrItems, $tabdata);
}
foreach ($_POST['jml_kembali_retak'] as $q3r => $q3t)
{
if(isset($data[$q3r]))
{
    $tabdata=LineTransaksi::model()->findByPk($data[$q3r]->id_line);  
}
else
{
    $tabdata=new LineTransaksi;
}
$tabdata->jml_kembali_retak=$q3t;
$tabdata->last_updated_date=new CDbExpression('now()');
array_push($arrItems, $tabdata);
}
foreach ($arrItems as $object)
{
$object->save();
}

更新:

你可以试试这个:

$arrItems = array();
foreach ($_POST['jml_kembali_bgs'] as $q3k => $q3v)
{
if(isset($data[$q3k]))
{
    $tabdata=LineTransaksi::model()->findByPk($data[$q3k]->id_line);  
}
else
{
    $tabdata=new LineTransaksi;
}
$tabdata->jml_kembali_bgs=$q3v;
array_push($arrItems, $tabdata);
}
foreach ($arrItems as $object)
{
$object->save();
}
foreach ($_POST['jml_kembali_retak'] as $q3r => $q3t)
{
if(isset($data[$q3r]))
{
    $tabdata=LineTransaksi::model()->findByPk($data[$q3r]->id_line);  
}
else
{
    $tabdata=new LineTransaksi;
}
$tabdata->jml_kembali_retak=$q3t;
$tabdata->last_updated_date=new CDbExpression('now()');
array_push($arrItems, $tabdata);
}
foreach ($arrItems as $object)
{
$object->save();
}

【讨论】:

  • 只需在最后一个 foreach ($arrItems as $object) 循环之前使用 print_r($arrItems) 检查 $arrItems 中的内容。
  • 如果我检查print_r ($arrItems) 数据已填充,但它不想存储在数据库中。
  • 谢谢安佳娜。但是还是一样,第一个foreach“jml_kembali_bgs”无法保存到数据库
  • @SatryaCahya,如果您尝试在第一个 foreach ($_POST['jml_kembali_bgs'] as $q3k => $q3v) 循环之后添加另一个 foreach ($arrItems as $object) { $object->save(); } 会怎样。
  • 成功,但我的function aftersave 中的数据总和重复了两次。 @Anjana
猜你喜欢
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2015-01-31
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多