CommodityModel.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace Models;
  3. class CommodityModel
  4. {
  5. private \PDO $pdo;
  6. public function __construct()
  7. {
  8. if (isset($GLOBALS['pdo']) && $GLOBALS['pdo'] instanceof \PDO) {
  9. $this->pdo = $GLOBALS['pdo'];
  10. return;
  11. }
  12. throw new \RuntimeException('Global PDO connection not initialized');
  13. }
  14. public function create(string $name, string $flag = 'a'): array
  15. {
  16. $stmt = $this->pdo->prepare('INSERT INTO "commodities" (commodities_name, commodities_flag) VALUES (:name, :flag) RETURNING commodities_id');
  17. $stmt->execute(['name' => $name, 'flag' => $flag]);
  18. $id = (int)$stmt->fetchColumn();
  19. return [
  20. 'commodities_id' => $id,
  21. 'commodities_name' => $name,
  22. 'commodities_flag' => $flag,
  23. ];
  24. }
  25. public function update(int $id, ?string $name = null, ?string $flag = null): ?array
  26. {
  27. $fields = [];
  28. $params = ['id' => $id];
  29. if ($name !== null) { $fields[] = 'commodities_name = :name'; $params['name'] = $name; }
  30. if ($flag !== null) { $fields[] = 'commodities_flag = :flag'; $params['flag'] = $flag; }
  31. if (!$fields) { return null; }
  32. $sql = 'UPDATE "commodities" SET ' . implode(', ', $fields) . ' WHERE commodities_id = :id';
  33. $stmt = $this->pdo->prepare($sql);
  34. $ok = $stmt->execute($params);
  35. if (!$ok) { return null; }
  36. $get = $this->pdo->prepare('SELECT commodities_id, commodities_name, commodities_flag FROM "commodities" WHERE commodities_id = :id');
  37. $get->execute(['id' => $id]);
  38. return $get->fetch(\PDO::FETCH_ASSOC) ?: null;
  39. }
  40. public function delete(int $id): bool
  41. {
  42. $stmt = $this->pdo->prepare('DELETE FROM "commodities" WHERE commodities_id = :id');
  43. $stmt->execute(['id' => $id]);
  44. return $stmt->rowCount() > 0;
  45. }
  46. public function getAll(?string $flag = 'a'): array
  47. {
  48. $columns = 'commodities_id, commodities_name, commodities_class, commodities_flag';
  49. if ($flag === null) {
  50. $stmt = $this->pdo->query('SELECT ' . $columns . ' FROM "commodities" ORDER BY commodities_id');
  51. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  52. }
  53. $stmt = $this->pdo->prepare('SELECT ' . $columns . ' FROM "commodities" WHERE commodities_flag = :flag ORDER BY commodities_id');
  54. $stmt->execute(['flag' => $flag]);
  55. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  56. }
  57. public function getIdByName(string $name): ?int
  58. {
  59. $stmt = $this->pdo->prepare('SELECT commodities_id FROM "commodities" WHERE LOWER(TRIM(commodities_name)) = LOWER(TRIM(:name)) LIMIT 1');
  60. $stmt->execute(['name' => $name]);
  61. $id = $stmt->fetchColumn();
  62. return $id !== false ? (int)$id : null;
  63. }
  64. }