1 | <?php |
2 | |
3 | function bdCrea(PDO $con) |
4 | { |
5 | $con->exec( |
6 | 'CREATE TABLE IF NOT EXISTS PASATIEMPO ( |
7 | PAS_ID INTEGER, |
8 | PAS_NOMBRE TEXT NOT NULL, |
9 | CONSTRAINT PAS_PK |
10 | PRIMARY KEY(PAS_ID), |
11 | CONSTRAINT PAS_NOM_UNQ |
12 | UNIQUE(PAS_NOMBRE) |
13 | )' |
14 | ); |
15 | $con->exec( |
16 | 'CREATE TABLE IF NOT EXISTS AMIGO ( |
17 | AMI_ID INTEGER, |
18 | AMI_NOMBRE TEXT NOT NULL, |
19 | PAS_ID INTEGER, |
20 | CONSTRAINT AMI_PK |
21 | PRIMARY KEY(AMI_ID), |
22 | CONSTRAINT AMI_NOM_UNQ |
23 | UNIQUE(AMI_NOMBRE) |
24 | CONSTRAINT AMI_PAS_FK |
25 | FOREIGN KEY (PAS_ID) REFERENCES PASATIEMPO(PAS_ID) |
26 | )' |
27 | ); |
28 | } |
29 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
4 | require_once __DIR__ . "/bdCrea.php"; |
5 | require_once __DIR__ . "/pasatiempoConsulta.php"; |
6 | require_once __DIR__ . "/pasatiempoAgrega.php"; |
7 | |
8 | class Bd |
9 | { |
10 | |
11 | private static ?PDO $conexion = null; |
12 | |
13 | static function getConexion(): PDO |
14 | { |
15 | if (self::$conexion === null) { |
16 | |
17 | self::$conexion = new PDO( |
18 | // cadena de conexión |
19 | "sqlite:srvauno.db", |
20 | // usuario |
21 | null, |
22 | // contraseña |
23 | null, |
24 | // Opciones: conexiones persistentes y lanza excepciones. |
25 | [PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] |
26 | ); |
27 | |
28 | bdCrea(self::$conexion); |
29 | $pasatiempo = pasatiempoConsulta(); |
30 | if (count($pasatiempo) === 0) { |
31 | $pasatiempo = new Pasatiempo(nombre: "Futbol"); |
32 | pasatiempoAgrega($pasatiempo); |
33 | |
34 | $pasatiempo = new Pasatiempo(nombre: "Videojuegos"); |
35 | pasatiempoAgrega($pasatiempo); |
36 | } |
37 | } |
38 | |
39 | return self::$conexion; |
40 | } |
41 | } |
42 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Amigo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function amigoAgrega(Amigo $modelo) |
7 | { |
8 | $modelo->valida(); |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "INSERT INTO AMIGO |
12 | (AMI_NOMBRE, PAS_ID) |
13 | VALUES |
14 | (:nombre, :pasId)" |
15 | ); |
16 | $stmt->execute([ |
17 | ":nombre" => $modelo->nombre, |
18 | ":pasId" => $modelo->pasatiempo === null |
19 | ? null |
20 | : $modelo->pasatiempo->id |
21 | ]); |
22 | /* Si usas una secuencia para generar el id, |
23 | * pasa como parámetro de lastInsertId el |
24 | * nombre de dicha secuencia, debes |
25 | * ejecutarlo antes del INSERT y pasarle el |
26 | * id generado al SQL. */ |
27 | $modelo->id = $con->lastInsertId(); |
28 | } |
29 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Amigo.php"; |
4 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
5 | require_once __DIR__ . "/Bd.php"; |
6 | |
7 | function amigoBusca(int $amiId) |
8 | { |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "SELECT |
12 | A.AMI_ID AS amiId, |
13 | A.AMI_NOMBRE AS amiNombre, |
14 | A.PAS_ID AS pasId, |
15 | P.PAS_NOMBRE AS pasNombre |
16 | FROM AMIGO A |
17 | LEFT JOIN PASATIEMPO P |
18 | ON A.PAS_ID = P.PAS_ID |
19 | WHERE A.AMI_ID = :amiId" |
20 | ); |
21 | $stmt->execute([":amiId" => $amiId]); |
22 | $stmt->setFetchMode(PDO::FETCH_OBJ); |
23 | $obj = $stmt->fetch(); |
24 | if ($obj === false) { |
25 | return false; |
26 | } else { |
27 | $pasatiempo = $obj->pasId === null |
28 | ? null |
29 | : new Pasatiempo(nombre: $obj->pasNombre, id: $obj->pasId); |
30 | $amigo = new Amigo( |
31 | nombre: $obj->amiNombre, |
32 | pasatiempo: $pasatiempo, |
33 | id: $obj->amiId |
34 | ); |
35 | return $amigo; |
36 | } |
37 | } |
38 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../../lib/php/recibeFetchAll.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function amigoConsulta() |
7 | { |
8 | $con = Bd::getConexion(); |
9 | $stmt = $con->query( |
10 | "SELECT |
11 | A.AMI_ID AS amiId, |
12 | A.AMI_NOMBRE AS amiNombre, |
13 | P.PAS_NOMBRE AS pasNombre |
14 | FROM AMIGO A |
15 | LEFT JOIN PASATIEMPO P |
16 | ON A.PAS_ID = P.PAS_ID |
17 | ORDER BY A.AMI_NOMBRE" |
18 | ); |
19 | $resultado = $stmt->fetchAll(PDO::FETCH_OBJ); |
20 | return recibeFetchAll($resultado); |
21 | } |
22 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/Bd.php"; |
4 | |
5 | function amigoElimina(int $id) |
6 | { |
7 | $con = Bd::getConexion(); |
8 | $stmt = $con->prepare( |
9 | "DELETE FROM AMIGO |
10 | WHERE AMI_ID = :id" |
11 | ); |
12 | $stmt->execute([":id" => $id]); |
13 | } |
14 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Amigo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function amigoModifica(Amigo $modelo) |
7 | { |
8 | $modelo->valida(); |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "UPDATE AMIGO |
12 | SET |
13 | AMI_NOMBRE = :nombre, |
14 | PAS_ID = :pasId |
15 | WHERE AMI_ID = :id" |
16 | ); |
17 | $stmt->execute([ |
18 | ":id" => $modelo->id, |
19 | ":nombre" => $modelo->nombre, |
20 | ":pasId" => $modelo->pasatiempo === null |
21 | ? null |
22 | : $modelo->pasatiempo->id |
23 | ]); |
24 | } |
25 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
4 | require_once __DIR__ . "/Bd.php"; |
5 | |
6 | function pasatiempoAgrega(Pasatiempo $modelo) |
7 | { |
8 | $modelo->valida(); |
9 | $con = Bd::getConexion(); |
10 | $stmt = $con->prepare( |
11 | "INSERT INTO PASATIEMPO |
12 | (PAS_NOMBRE) |
13 | VALUES |
14 | (:nombre)" |
15 | ); |
16 | $stmt->execute([":nombre" => $modelo->nombre]); |
17 | /* Si usas una secuencia para generar el id, |
18 | * pasa como parámetro de lastInsertId el |
19 | * nombre de dicha secuencia, debes |
20 | * ejecutarlo antes del INSERT y pasarle el |
21 | * id generado al SQL. */ |
22 | $modelo->id = $con->lastInsertId(); |
23 | } |
24 |
1 | <?php |
2 | |
3 | require_once __DIR__ . "/../../lib/php/recibeFetchAll.php"; |
4 | require_once __DIR__ . "/../modelo/Pasatiempo.php"; |
5 | require_once __DIR__ . "/Bd.php"; |
6 | |
7 | /** @return Pasatiempo[] */ |
8 | function pasatiempoConsulta() |
9 | { |
10 | $con = Bd::getConexion(); |
11 | $stmt = $con->query( |
12 | "SELECT |
13 | PAS_ID AS id, |
14 | PAS_NOMBRE AS nombre |
15 | FROM PASATIEMPO |
16 | ORDER BY PAS_NOMBRE" |
17 | ); |
18 | $resultado = $stmt->fetchAll( |
19 | PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, |
20 | Pasatiempo::class |
21 | ); |
22 | return recibeFetchAll($resultado); |
23 | } |
24 |