Comparison between Array and Database, Codeigniter inclusion and exclusion

Asked

Viewed 104 times

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.

inserir a descrição da imagem aqui

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 o operador_id is equal to 1 and in the database this operador_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.

  • 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 already operador_id = 1 e equipe_id = 1, but in the array, it’s coming operador_id = 1 e equipe_id = 2, then in the database, it should be in accordance with the array.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.