Neste post, vamos criar as funções que irão realizar as operações inserir, atualizar e deletar os registros da tabela bacia_hidrografica.
Antes de começarmos a criar as funções, vamos habilitar a biblioteca "session" do codeigniter e o helper "form", para isso, abra o arquivo autoload.php e modifique as linhas 42 e 54, respectivamente para:
$autoload['libraries'] = array('database', 'session');
$autoload['helper'] = array('url', 'form');Vamos começar definindo uma função no model que será responsável por inserir os registros na tabela, abra o arquivo bacia_model.php e adicione a seguinte função:
function insert()
{
$data = $_POST;
return $this->db->insert('bacia_hidrografica', $data);
}
Já a função abaixo, retorna a linha da tabela com o id_bacia informado, ela será usada para povoar o campo "nome da bacia" do formulário de atualização:
function get_where($id)
{
$this->db->where('id_bacia', $id);
$query = $this->db->get('bacia_hidrografica');
return $query->row();
}
Para realizar o update, usaremos a função abaixo:
function update($id)
{
$data = $_POST;
$this->db->where('id_bacia', $id);
$this->db->update('bacia_hidrografica', $data);
}
Para deletar um registro desta tabela, primeiro faz-se necessário verificar se a mesma não possui nenhum rio vinculado, pois isso vai gerar uma mensagem de erro vinda do banco de dados, em função da constraint foreign key, logo criaremos a função abaixo que fará essa verificação de vínculo:
De posse da função acima, criaremos a função delete():
Agora, vamos criar duas funções no controller bacia.php, uma para chamar o formulário que será utilizado para a inserção de novos registros, e a outra, que será responsável por efetivar esta operação, através da função definida no model anteriormente (função insert() ):
function verifica_fk($id)
{
$this->db->where('id_bacia', $id);
$query = $this->db->get('rio');
if ($query->num_rows > 0)
{
// se houver fk, retorne falso
return false;
} else
{
return true;
}
} De posse da função acima, criaremos a função delete():
function delete($id)
{
// se for verdadeiro, pode apagar o registro
if ($this->verifica_fk($id))
{
$this->db->where('id_bacia', $id);
return $this->db->delete('bacia_hidrografica');
}
else
{
return false;
}}
Agora, vamos criar duas funções no controller bacia.php, uma para chamar o formulário que será utilizado para a inserção de novos registros, e a outra, que será responsável por efetivar esta operação, através da função definida no model anteriormente (função insert() ):
OBS: Não vamos usar nenhuma função de validação dos dados nesse momento, este será um assunto abordado em um próximo post.
function criar()
{
$data['titulo'] = "SIRH - Nova Bacia Hidrográfica";
$data['cabecalho'] = "Criar nova Bacia Hidrográfica";
$this->load->view('bacia_new', $data);
}
function insere()
{
$this->bacia_model->insert();
$this->session->set_flashdata('msg', 'Registro Criado com Sucesso!');
redirect('bacia');
}
Seguindo o mesmo raciocínio, para realizar a atualização dos registros, vamos criar mais duas funções no controller, editar() e atualizar():
function editar($id)
{
$data['titulo'] = "SIRH - Editar Bacia Hidrográfica";
$data['cabecalho'] = "Editar Bacia Hidrográfica";
$data['registro'] = $this->bacia_model->get_where($id);
$this->load->view('bacia_new', $data);
}
function atualizar()
{
$id = $this->input->post('id_bacia');
$this->bacia_model->update($id);
$this->session->set_flashdata('msg', 'Registro Atualizado com Sucesso!');
redirect('bacia');
}
Criamos então a view bacia_new.php, que tanto servirá para inserir, quanto para atualizar, isso é feito através da verificação da existência da variável $registro->id_bacia:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?= $titulo ?></title>
</head>
<body>
<h2><?= $cabecalho ?></h2>
<?php
//verifica se o form vai ser usado para insert ou update
if (!isset($registro->id_bacia))
{
echo form_open('bacia/insere');
}
else
{
echo form_open('bacia/atualizar');
echo form_hidden('id_bacia', $registro->id_bacia);
}
?>
<p><label>Nome da Bacia:</label>
<input name="nome_bacia" type="text" id="nome_bacia" size="40" value="<?= @$registro->nome_bacia ?>" />
</p>
<p>
<input type="submit" id="Enviar" value="Enviar" />
</p>
<?= form_close() ?>
</body>
</html>
Finalizando o controller bacia.php, adicionamos a função deletar(), que vai chamar a função delete() do model:
function deletar($id)
{
if ($this->bacia_model->delete($id))
{
$this->session->set_flashdata('msg', 'Registro Deletado com Sucesso!');
}
else
{
$this->session->set_flashdata('msg', 'ERRO - Não foi possível deletar este registro!<br/>
Primeiro apague os Rios que se relacionam com esta Bacia');
}
redirect('bacia');
}
Para terminar, abra o arquivo bacia_view.php e logo abaixo do cabeçalho, chame a função que irá exibir as mensagens para as operações realizadas pelo usuário:
<p><?=@$this->session->flashdata('msg');?></p> Pronto!!! Já temos um CRUD funcional para a tabela bacia_hidrografica, porém sem a validação dos formulários, isso será o assunto da próxima postagem, até lá!





