0
I decided on this question, a question I had about including and removing items that was in the array and was not in the database or vice versa.
So I tried to use the same method for a team record, but it didn’t work. I changed some lines, but without success.
Let’s see:
In the objto_equipe
there is an attribute called equipe_operador
of the kind array
,
In the attribute equipe_operador
will be sent equipe_id e operador_id
.
The question now is on account of the method that will manage the inclusion and deletion of the database.
The general rule of registering an operator on the team is:
- The
operador_id
CANNOT be associated with more than one equipe_id, so if in the array ooperador_id
is equal to 1 and in the database thisoperador_id
is the same, but the team is different, so delete what is in the database and include what is coming in the array. - Whenever you come in the array
equipe_id = 0
, means that the operator is not part of any team
Until now I arrived at the following method.
Model
public function verificar_equipe($operador_id)
{
$this->db->select('operador_id, equipe_id');
$this->db->from($this->tb_operador_equipe);
$this->db->where('operador_id', $operador_id);
$query = $this->db->get();
return $query;
}
public function incluir_equipe($dados, $equipe_id)
{
$array = (array) $dados;
foreach ($dados as $equ)
{
$id = $equ->operador_id.$equipe_id; // concatena equipe_id + operador_id
$equipe = [
'id' => $id,
'equipe_id' => $equipe_id,
'operador_id' => $equ->operador_id,
];
$this->db->insert($this->tb_operador_equipe, $equipe);
}
}
public function remover_equipe($equipe_id, $operador_id)
{
$this->db->where('operador_id', $operador_id);
$this->db->where('equipe_id', $equipe_id);
$this->db->delete($this->tb_operador_equipe);
}
Controller
foreach ($equipes as $_equipe => $obj_equipe)
{
$verifica_equipe = $this->equipe->verificar_equipe($obj_equipe->operador_id);
//print_r($obj_equipe);
if ($verifica_equipe->num_rows())
{
// se encontrou registros, o operador está associado a uma equipe. vamos verificar:
foreach ($verifica_equipe->result() as $equipe)
{
// está na tabela e não está no array, então remove da tabela
if (!in_array($equipe->operador_id, $equipes))
{
print_r($equipe->equipe_id);
$this->equipe->remover_equipe($equipe->equipe_id, $equipe->operador_id);
}
else
{
// estão na tabela e no array, então remove do array p/ evitar INSERTs duplicados
$chave = array_search($equipe, $equipes);
unset($equipes[$chave]);
}
}
$this->equipe->incluir_equipe($equipes, $equipe_id);
}
else
{
// não possui equipe, faz somente os INSERTs...
if ($obj_equipe->equipe_id == 0)
{
print_r("Inclusão de IDs que não existe no banco");
//$this->equipe->incluir_equipe($equipes, $equipe_id);
}
}
}
I was confused when he started explaining the rule.
– Leandro RR
the rule is that in the database can only have a single operator_id. the table of the database is
id, operador_id e equipe_id
, if there is alreadyoperador_id = 1 e equipe_id = 1
, but in the array, it’s comingoperador_id = 1 e equipe_id = 2
, then in the database, it should be in accordance with the array.– Wagner Fillio