php - 如何根据程序id制作循环更新子程序
问题描述
我创建了一个程序来根据程序 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% |
+------------+--------+----------------+------------+------------+
如果我在设置中将合同价值从 100,000,000 更改为 50,000,000,结果将是
+------------+--------+----------------+------------+------------+
| 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));
}
我想用 realisasi_model 的子值更改 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();
}
推荐阅读
- javascript - 在另一个 Promise 包裹的流中等待 Promise
- unity3d - UI 元素在 Android 上无法正确呈现
- javascript - Ruby on rails 不加载 Javascript
- machine-learning - 我已经完成了一个分类问题,我得到了 99.9% 的准确率,但准确率、召回率、f1 为 0
- asp.net - FileSystemWatcher 不会在 Azure 中触发
- java - 如何使用 Junit 5 使用 Testcontainer 对 Kafka 运行集成测试
- angular - 如何将 PrimeNg 表格行设置为文档的 activeElement
- http - URL长度的上限?
- google-apps-script - 编辑特定范围时如何运行函数
- regex - 正则表达式仅允许且仅允许数字