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á!
Nenhum comentário:
Postar um comentário