Работа с массивом объектов и вставка в базу данных - PHP codeigniter

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

Мне нужно знать, возможно ли это, чтобы не тратить время на что-то, если это было невозможно сделать:

Учитывая массив ниже:

Array
(
[0] => stdClass Object
    (
        [id] => 0
        [atraso_inicial] => 1
        [atraso_final] => 30
        [multa] => 2.00
        [juros] => 1.00
        [honorario] => 0.00
        [plano] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 0
                        [parcela] => 1
                        [ajuste] => 0.00
                        [entrada_minima] => 0.00
                        [desconto_multa] => 0.00
                        [desconto_juros] => 0.00
                        [desconto_principal] => 0.00
                        [desconto_honorario] => 0.00
                        [fase_id] => 1
                        [crud] => C
                    )

            )

        [campanha_id] => 1
        [crud] => C
    )

[1] => stdClass Object
    (
        [id] => 0
        [atraso_inicial] => 31
        [atraso_final] => 60
        [multa] => 2.00
        [juros] => 1.00
        [honorario] => 0.00
        [plano] => Array
            (
                [0] => stdClass Object
                    (
                        [id] => 0
                        [parcela] => 1
                        [ajuste] => 0.00
                        [entrada_minima] => 0.00
                        [desconto_multa] => 0.00
                        [desconto_juros] => 0.00
                        [desconto_principal] => 0.00
                        [desconto_honorario] => 0.00
                        [fase_id] => 1
                        [crud] => C
                    )

            )

        [campanha_id] => 1
        [crud] => C
    )
)

Мне нужно определить в элементе [phase_id] объекта [plan] значение идентификатора ключа [0] и проделать то же самое с ключом 1 и так далее.

Если бы у меня было значение [id], перед вставкой это было бы легко, проблема в том, что на этом этапе я собираюсь ввести данные в первый раз, поэтому у меня еще нет идентификатора.

На данный момент у меня есть следующий контроллер и модальное окно:

контролер

if (!empty($campanha[0]))
{
    $campanha_id = $this->empresa->add_campanha($campanha, $empresa_id);

    foreach ($campanha as $camp => $objeto_campanha)
    {
          $fase = $objeto_campanha->fase;
          $this->empresa->add_fase($fase, $campanha_id);
          foreach ($fase as $fas => $objeto_fase)
          {
               $plano = $objeto_fase->plano;
               $this->empresa->add_plano($plano);
           }
     }
}

модель

// add_campanha
public function add_campanha($dados, $empresa_id)
{       
    $array = (array) $dados;
    foreach ($dados as $camp)
    {
        $campanha = [       
            'nome'       => $camp->nome_campanha,
            'empresa_id' => $empresa_id,
        ];
        $this->db->insert($this->tb_campanha, $campanha);
        $campanha_id = $this->db->insert_id();
        return $campanha_id;
    }
}

// add_fase
public function add_fase($dados, $campanha_id)
{
    print_r($dados);
    $array = (array) $dados;
    foreach ($dados as $fase)
    {
        $fase = [
            'atraso_inicial' => $fase->atraso_inicial,
            'atraso_final'   => $fase->atraso_final,
            'multa'          => $fase->multa,
            'juros'          => $fase->juros,
            'honorario'      => $fase->honorario,
            'campanha_id'    => $campanha_id
        ];
        $this->db->insert($this->tb_fase, $fase);
        $fase_id = $this->db->insert_id();          
        return $fase_id;
    }
}

// add_plano
public function add_plano($dados)
{
    $array = (array) $dados;
    foreach ($dados as $plan)
    {
        $plano = [
            'parcela'            => $plan->parcela,
            'ajuste'             => $plan->ajuste,
            'entrada_minima'     => $plan->entrada_minima,
            'desconto_juros'     => $plan->desconto_juros,
            'desconto_multa'     => $plan->desconto_multa,
            'desconto_principal' => $plan->desconto_principal,
            'desconto_honorario' => $plan->desconto_honorario,
            'fase_id'            => $plan->fase_id,
        ];
        $this->db->insert($this->tb_plano, $plano);
    }
}

Таблица

/* campanha */
DROP TABLE IF EXISTS `tb_campanha`;
CREATE TABLE IF NOT EXISTS `tb_campanha` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nome` VARCHAR(255) NOT NULL,
  `empresa_id` INT(11) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARSET = utf8;

/* fase */
DROP TABLE IF EXISTS `tb_fase`;
CREATE TABLE IF NOT EXISTS `tb_fase` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `atraso_inicial` INT(10) UNSIGNED NOT NULL,
  `atraso_final` INT(10) UNSIGNED NOT NULL,
  `multa` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `juros` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `honorario` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `campanha_id` INT(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARSET = utf8;

/* plano */
DROP TABLE IF EXISTS `tb_plano`;
CREATE TABLE IF NOT EXISTS `tb_plano` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `parcela` INT(10) UNSIGNED NOT NULL,
  `ajuste` DECIMAL(10,2) NOT NULL,
  `entrada_minima` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `desconto_juros` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `desconto_multa` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `desconto_principal` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `desconto_honorario` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `fase_id` INT(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARSET = utf8;

Работа с массивом объектов и вставка в базу данных - PHP codeigniter

Стоит ли изучать 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
0
254
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Функция add_fase () возвращает $ fase_id. Если я вас правильно понял, вы должны поместить в свой контроллер следующее:

  if (!empty($campanha[0]))
  {
      $campanha_id = $this->empresa->add_campanha($campanha, $empresa_id);

      foreach ($campanha as $camp => $objeto_campanha)
      {
            $fase = $objeto_campanha->fase;
            $fase_id = $this->empresa->add_fase($fase, $campanha_id);
            foreach ($fase as $fas => $objeto_fase)
            {
                 $plano = $objeto_fase->plano;
                 $this->empresa->add_plano($plano, $fase_id);
             }
       }
  }

И вы бы обновили свой метод модели add_plano () следующим образом:

  public function add_plano($dados, $fase_id)
{
    $array = (array) $dados;
    foreach ($dados as $plan)
    {
        $plano = [
            'parcela'            => $plan->parcela,
            'ajuste'             => $plan->ajuste,
            'entrada_minima'     => $plan->entrada_minima,
            'desconto_juros'     => $plan->desconto_juros,
            'desconto_multa'     => $plan->desconto_multa,
            'desconto_principal' => $plan->desconto_principal,
            'desconto_honorario' => $plan->desconto_honorario,
            'fase_id'            => $fase_id, //note we've changed this to the fase_id that we explicitly passed as variable to this method
        ];
        $this->db->insert($this->tb_plano, $plano);
    }
}

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