Как сделать подпрограмму обновления цикла на основе идентификатора программы

Я создал программу для расчета процента от стоимости контракта на основе идентификатора программы, где у программы есть несколько подпрограмм.

например:

+------------+--------+----------------+------------+------------+
| 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%        |
+------------+--------+----------------+------------+------------+

если стоимость контракта изменяется, тогда стоимость субподряда не меняется в процентах в соответствии со стоимостью контракта, который был изменен, формула представляет собой стоимость субподряда / стоимости контракта * 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));
}

Я хочу изменить 50000000 с дополнительным значением из realisasi_model, но я не знаю. я должен использовать foreach внутри контроллера? Я очень ценю, если вы можете мне помочь, спасибо

"я хочу изменить 50000000 на дополнительное значение из realisasi_model" ... для всех строк? можешь немного лучше объяснить? где ты берешь $contract_value?

Alex 30.07.2018 02:43

также ваша формула не соответствует формуле в вашем коде.

Alex 30.07.2018 02:52
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
23
1

Ответы 1

Думаю, это то, что вам нужно:

Вам нужно будет проверить несколько вещей, таких как имена столбцов и формулу, потому что я видел довольно много несоответствий между вашим кодом и тем, что вы объясняли.

Контроллер:

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();
    }

Другие вопросы по теме