我正在研究将一些信息插入数据库并检索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;
答案 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);
}
}