使用对象数组并将其插入数据库-PHP codeigniter

时间:2018-08-09 17:40:12

标签: php codeigniter

我正在研究将一些信息插入数据库并检索ID的方法,以便将该ID插入另一个表中。

我需要知道这是否可行,以免在无法做的事情上浪费时间:

考虑下面的数组:

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
    )
)

我需要在[plan]对象的[phase_id]项中定义键[0]的id的值,并使用键1做同样的事情,依此类推。

如果我具有[id]的值,那么在插入之前会很容易,问题在于此时我要第一次输入数据,所以我还没有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;

enter image description here

1 个答案:

答案 0 :(得分: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);
    }
}