AULA 8 – CRIANDO UMA CLASSE EM PHP INTERAGINDO COM BANCO DE DADOS - COM
RELACIONAMENTO ENTRE TABELAS
Na grande maioria dos sistemas, faz-se necessário utilizar informações que estão
armazenadas em uma determinada tabela, para serem gravadas em outras. Por exemplo: Se
cadastrarmos um aluno na tabela alunos, precisamos das informações dos cursos
cadastrados e associar este aluno a um dos cursos. Os alunos estão cadastradis em uma tabela
e os cursos em outra. O que ligaria estes alunos a cada curso ? Seria através do código do curso.
Ou seja, o código do curso da tabela cursos, irá relacionar-se com o código do curso da tabela
alunos.
É exatamente este modelo que veremos nas próximas aulas.
Além da tabela cursos, vamos relacionar a tabela alunos com as seguintes tabelas: tipostatus
e turno. Desta forma, teremos um modelo de cadastro um pouco mais complexa, e adaptável para
outras realidades.
O modelo da tela do cadastro de alunos está abaixo.
Verifique se:
 o banco de dados academico está criado.
 Se no banco de dados estão as tabelas cursos, tipostatus, turno e alunos.
1
MODELAGEM DE RELACIONAMENTO ENTRE AS TABELAS
Script das tabelas no banco de dados academico
create table cursos (
codcurso serial primary key,
nomecurso varchar(40) NOT NULL,
CONSTRAINT un_curso UNIQUE (nomecurso)
)
create table turnos (
codturno serial primary key,
desturno varchar(20) NOT NULL,
CONSTRAINT un_turnos UNIQUE (desturno)
)
create table tipostatus (
codstatus serial primary key,
descricao varchar(40) NOT NULL,
CONSTRAINT un_status UNIQUE (descricao)
)
Utilizando as telas já prontas, inclua alguns dados nas tabelas acima
-------------------------------Tabela alunos: a tabela alunos deverá estar relacionada com as tabelas cursos, turnos e tipostatus
create table alunos (
matricula integer primary key,
nome varchar(60) NOT NULL,
endereco varchar(60) NOT NULL,
bairro varchar(20) NOT NULL,
telefone integer,
datanasc date,
codcurso integer REFERENCES cursos (codcurso),
codturno integer REFERENCES turnos (codturno),
codstatus integer REFERENCES tipostatus (codstatus)
)
2
A classe Alunos terá praticamente os mesmos métodos da classe Cursos, sendo que todos os
atributos mudam:
CLASSE ALUNO
- matricula: string
+ nomealuno: string
+ codcurso: integer
+ codturno: integer
+ codstatus: integer
+ endereco: string
+ bairro: string
+ cep: integer
+ telefone: integer
+ datanasc: date
+Incluir()
+Alterar()
+Excluir()
+Pesquisar()
+Listar()
Os métodos que farão parte da classe Alunos serão Incluir(), Alterar(), Excluir(), Pesquisar() e
Listar(). Como disse, quase tudo será muito parecido com o que já fizemos no cadastro de cursos.
Deverão ser criados : classe Alunos (class.alunos.php), o programa com a tela
(cadalunos.php) e as regras (cadalunos_regras.php).
De diferente do modelo inicial, temos o método Pesquisar(), que irá selecionar os campos de
apenas um (1) aluno. A utilização do método Pesquisar() veremos em breve.
IMPLEMENTAR A CLASSE ALUNO
Vamos iniciar a construção da classe alunos. Como disse anteriormente, teremos
praticamente os mesmos métodos da classe cursos, sendo que temos mais campos, e desta forma,
mais atributos a serem declarados na classe.
Passos a serem executados:
1) Declarar os atributos de acordo com o diagrama do início da página
2) Criar o método construtor, sabendo-se que a matricula é um atributo com visibilidade
privada.
3) Criar o método para incluir os dados na tabela
MÉTODO INCLUIR
<?php
include "conecta.inc";
class Aluno {
// Declaraçao dos atrbutos
private $matricula;
public $nome;
public $endereco;
public $bairro;
public $telefone;
public $datanasc;
public $codcurso;
public $codturno;
public $codstatus;
// Método Construtor
function __construct($matricula=NULL) {
if ($matricula <> NULL) {
3
$this->matricula = $matricula;
}
}
// Método para incluir dados
// O comando SET DATESTYLE TO 'SQL, DMY'; formata os campos tipo date
public function Incluir() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
INSERT INTO alunos
(matricula, nome, endereco, bairro, telefone, datanasc, codcurso, codturno, codstatus)
VALUES
($this->matricula, '$this->nome', '$this->endereco', '$this->bairro',
$this->telefone, '$this->datanasc', $this->codcurso, $this->codturno, $this->codstatus )";
$res = @pg_query($sql);
if (@pg_affected_rows($res) > 0) { // conta número de linhas afetadas
return "Aluno incluido com sucesso !!!";
} else {
return "Falha na inclusão !!!";
}
}
}
IMPORTANTE
Uma novidade, é na nossa modelagem termos acrescentado um campo do tipo DATE. Como
existem problemas com formatação de data, um dos recursos que podemos utilizar é o comando
SQL “SET DATESTYLE TO 'SQL, DMY';”. O comando SET DATESTYLE, que é um comando SQL, formata
o estilo de data de acordo com o que desejarmos. No nosso caso, o nosso formato é dia/mes/ano (DMY).
Existem outras formas de retornar uma data formatada, mas o importante é que seja feito, pois senão a data
poderá retorna em formato americado (YMD).
MÉTODOS ALTERAR E EXCLUIR
Os métodos alterar e excluir deverão ter como condição executar o comando a partir de uma
determinada matrícula.
// Método para alterar dados da tabela
public function Alterar() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
UPDATE alunos SET
nome = '$this->nome',
endereco = '$this->endereco',
bairro = '$this->bairro',
telefone = $this->telefone,
datanasc = '$this->datanasc',
codcurso = $this->codcurso,
codturno = $this->codturno,
codstatus = $this->codstatus
WHERE
matricula = $this->matricula";
$res = @pg_query($sql);
if (@pg_affected_rows($res) > 0) {
return "Aluno Alterado com sucesso !!!";
} else {
return "Falha na Alteração !!!";
}
}
4
// Método para excluir dados
public function Excluir() {
$sql = "DELETE FROM alunos WHERE matricula = $this->matricula";
$res = @pg_query($sql);
if (@pg_affected_rows($res) > 0) {
return "Matricula excluida com sucesso !!!";
} else {
return "Falha na Exclusão !!!";
}
}
MÉTODO PESQUISAR
Este método será construído para implementação na tela de cadastro de alunos. Será consultado
todos os dados de 1 (um) aluno, a partir da matricula informada no formulário.
// Método para selecionar os campos de apenas 1 aluno, de acordo com o valor do atributo
matricula, retornando uma array com estes dados
public function Pesquisar() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
SELECT
matricula, nome, endereco, bairro, telefone, datanasc, codcurso, codturno, codstatus
FROM alunos
WHERE matricula = $this->matricula";
$res = @pg_query($sql);
$dados = @pg_fetch_all($res);
return $dados;
}
MÉTODO LISTAR
Este método seleciona todos os dados da tabela, e retorna em formato array. Pode ser utilizado em
uma consulta na tela ou em um relatório.
Como vamos precisar das descrições das demais tabelas (cursos, tipostatus, turnos), teremos que
selecionar os dados utilizando o INNER JOIN.
// Selecionar todos os dados de uma tabela
public function Listar() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
SELECT
matricula, nome, endereco, bairro, telefone, datanasc, cur.codcurso,
nomecurso, tur.codturno, desturno, stat.codstatus, descricao
FROM
alunos alu
INNER JOIN cursos cur ON cur.codcurso=alu.codcurso
INNER JOIN turnos tur ON tur.codturno=alu.codturno
INNER JOIN tipostatus stat ON stat.codstatus=alu.codstatus
ORDER BY nome";
$res = pg_query($sql);
$dados = pg_fetch_all($res);
return $dados;
}
Obs: No caso da tabela alunos, como existe relacionamento entre outras tabelas, estamos utilizando a
junção INNER JOIN, para relacionar os dados entre as tabelas.
5
PROGRAMA PARA TESTAR A CLASSE ALUNOS
Vamos criar um programa chamado testaraluno.php, onde iremos instanciar a classe, declarar os atributos e
testar alguns métodos.
<?php
include "class.aluno.php";
$objeto = new Aluno(1);
$objeto->nome = 'Aline';
$objeto->endereco = 'Rua talssss';
$objeto->bairro = 'Coisa e tal';
$objeto->telefone ='111';
$objeto->datanasc = '24/04/1994';
$objeto->codcurso = 1;
$objeto->codturno = 1;
$objeto->codstatus = 1;
var_dump($objeto);
$objeto->Incluir();
?>
EXERCÍCIO
Para exercitar, criem uma classe chamada Professor, com praticamente os mesmos atributos e com
os mesmos métodos. Faça também o programa para instanciar e testar a classe e seus méodos.
CLASSE ALUNO
- matricula: string
+ nomealuno: string
+ codcurso: integer
+ endereco: string
+ bairro: string
+ cep: integer
+ telefone: integer
+ datanasc: date
+Incluir()
+Alterar()
+Excluir()
+Pesquisar()
+Listar()
6
Download

AULA 8 – CRIANDO UMA CLASSE EM PHP INTERAGINDO COM