Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据程序id生成循环更新子程序_Php_Codeigniter - Fatal编程技术网

Php 如何根据程序id生成循环更新子程序

Php 如何根据程序id生成循环更新子程序,php,codeigniter,Php,Codeigniter,我创建了一个程序,根据程序id计算合同价值的百分比,程序中有几个子程序 例如: +------------+--------+----------------+------------+------------+ | Id program | Id sub | contract value | sub value | Percentage | +------------+--------+----------------+------------+------------+ |

我创建了一个程序,根据程序id计算合同价值的百分比,程序中有几个子程序

例如:

+------------+--------+----------------+------------+------------+
| Id program | Id sub | contract value | sub value  | Percentage |
+------------+--------+----------------+------------+------------+
|          1 |    111 |    100.000.000 | 10.000.000 | 10%        |
|          2 |    112 |    100.000.000 | 20.000.000 | 20%        |
+------------+--------+----------------+------------+------------+
如果我将合同价值从100000000更改为50000000, 结果会是这样

+------------+--------+----------------+------------+------------+
| Id program | Id sub | contract value | sub value  | Percentage |
+------------+--------+----------------+------------+------------+
|          1 |    111 |    50.000.000  | 10.000.000 | 20%        |
|          2 |    112 |    50.000.000  | 20.000.000 | 40%        |
+------------+--------+----------------+------------+------------+
如果合同价值发生变化,则根据已变更的合同价值,分项价值不改变tp百分比,公式为分包/合同价值*100

我的控制器

public function add($id) { 

  $data['realisasi'] = $this->realisasi_model->all_realisasi_program($id);
  $data = array (
    'id_program' => $id,
    'contract_value' => $contract_value
  );
  $this->addendum_model->update_contract($id, $data);

  if ($this->addendum_model->update_contract($data)) {
    $percent_update = 50000000 / $contract_value* 100; 

    $datareal = array(
       'REAL_SUBPRO_PERCENT' => $percent_update
    );

    $this->realisasi_model->update_percent($id, $datareal);
  }
}
我的模型

public function update_percent($id, $datareal) {
    return $this->db->update('TX_REAL_SUB_PROGRAM', $datareal, 
    array('id_program' => $id));
}

我想用Realizasi_模型的子值更改50000000,但我不知道。 我应该在控制器内使用foreach吗?
如果你能帮我,我真的很感激。谢谢你。我想这就是你想要的:

你必须检查一些东西,比如列名和公式,因为我看到你的代码和你解释的内容之间有很多差异

控制器:

public function update_contract_value() {
    $contract_val_new = $this->input->post('contract_value');
    if (is_null($contract_val_new)) {
        show_error('Missing parameters.');
    }
    if ($this->somemodel->change_contract_value_all($contract_val_new)) {
        echo 'Done';
    } else {
        show_error('Query failed.');
    }
}
模型功能:

public function change_contract_value_all($new_contract_value) {
        $rows = $this->get_all();
        if (!$rows) {
            return false; // no items in table
        }
        $this->db->trans_start();
        foreach ($rows as $row) {
            $data = array(
                'contract_value' => $new_contract_value, // check column name?
                'REAL_SUBPRO_PERCENT' => $this->calc_contract_percent($new_contract_value, $row->REAL_SUBPRO_PERCENT) // check column name `REAL_SUBPRO_PERCENT`?
            );
            $this->db->update('TX_REAL_SUB_PROGRAM', $data, array('id_program' => $row->id_program);
        }
        $this->db->trans_complete();
        return $this->db->trans_status();
    }

    public function calc_contract_percent($sub_value, $contract_value) {
        return ($sub_value / $contract_value) * 100;
    }

    public function get_all() {
        $q = $this->db->get('TX_REAL_SUB_PROGRAM');
        if ($q->num_rows() < 1) {
            return false;
        }
        return $q->result();
    }
public function change\u contract\u value\u all($new\u contract\u value){
$rows=$this->get_all();
如果(!$行){
返回false;//表中没有项
}
$this->db->trans_start();
foreach($行作为$行){
$data=数组(
'contract\u value'=>$new\u contract\u value,//检查列名?
'REAL\u subpo\u PERCENT'=>$this->calc\u contract\u PERCENT($new\u contract\u value,$row->REAL\u subpo\u PERCENT)//检查列名'REAL\u subpo\u PERCENT'?
);
$this->db->update('TX\u REAL\u SUB\u PROGRAM',$data,array('id\u PROGRAM'=>$row->id\u PROGRAM);
}
$this->db->trans_complete();
返回$this->db->trans_status();
}
公共功能计算合同百分比($sub\u值,$contract\u值){
回报($sub_值/$contract_值)*100;
}
公共函数get_all(){
$q=$this->db->get('TX_REAL_SUB_PROGRAM');
如果($q->num_rows()<1){
返回false;
}
返回$q->result();
}

“我想用Realizasi\u模型中的子值更改50000000”…所有行?你能解释得更清楚一点吗?你从哪里得到
$contract\u value
?而且你的公式与你代码中的公式不匹配。