CommodityModel.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. if ($flag === null) {
  49. $stmt = $this->pdo->query('SELECT commodities_id, commodities_name, commodities_flag FROM "commodities" ORDER BY commodities_id');
  50. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  51. }
  52. $stmt = $this->pdo->prepare('SELECT commodities_id, commodities_name, commodities_flag FROM "commodities" WHERE commodities_flag = :flag ORDER BY commodities_id');
  53. $stmt->execute(['flag' => $flag]);
  54. return $stmt->fetchAll(\PDO::FETCH_ASSOC);
  55. }
  56. }