Ir skaidrs, ka veids, kā tikko pieslēdzāmies datu bāzei un uzrakstījām SQL vaicājumu tieši kontrolierī nav īsti feins - tas noteikti neatbilst Model - View - Controller jeb MVC pieejai. Tieši tāpēc projektā jāievieš modeļi!
Ir skaidrs, ka veids, kā tikko pieslēdzāmies datu bāzei un uzrakstījām SQL vaicājumu tieši kontrolierī nav īsti feins - tas noteikti neatbilst Model - View - Controller jeb MVC pieejai. Tieši tāpēc projektā jāievieš modeļi!
Tas, ko vēlamies panākt, ir, lai
BlogController metodē index()var
uzrakstīt tikai statisku metodes izsaukumu
$posts = Blog::all() un visi bloga ieraksti tiek
saglabāti mainīgajā!
models
Ar visiem modeļiem parasti tiek veiktas līdzīgas darbības, kas atbilst CRUD. Lai metodes nevajadzētu atkārtot, šis ir labs piemērs mantošanai!
Model.php
<?php
require "Database.php";
abstract class Model {
}
Abstrakta klase ir tāda klase, kura
pati par sevi nevar pastāvēt - tā ir tikai kā
paraugs tām klasēm, kas mantos visas protected un
public īpašības un metodes no šīs klases.
Abstraktu klasi PHP veido ar atslēgvārdu
abstract
$db:
protected static $db;
Statiska īpašība vai metode ir tāda, kurai
nevajag klases objektu jeb instanci, lai tā
pastāvētu un to varētu izsaukt. Statiskas īpašības un metodes
PHP veido ar atslēgvārdu
static
init() metodi:
public static function init() {
if (!self::$db) {
self::$db = new Database();
}
}
init() metode palīdz panākt
Singleton Pattern - izsauc cik gribi, bet
iegūsti vienu. Šis ir ļoti interesants temats, par ko vērts
parunāt ar ChatGPT!
abstract protected static function getTableName(): string;
abstract - visām atvasinātajām klasēm (visiem
modeļiem) obligāti jādefinē šī metode, tātad arī obligāti
jānorāda, pie kādas datu bāzes tabulas pieslēgties
protected - modifikators, kurš nosaka, ka šī
metode ir tikai pieejama no atvasinātajām klasēm, bet ne no
ārpuses
static - šī metode ir statiska, tai nevajag
klases objektu vai instanci, jo viss modelis, piemēram,
Blog vēlēsies sazināties tikai un vienīgi ar
vienu un to pašu tabulu
blog
: string - uzspiež, ka metode obligāti atgriež
simbolu virkni
all(), kas iegūst visus tabulas ierakstus no datu
bāzes:
public static function all() {
self::init();
$sql = "SELECT * FROM " . static::getTableName();
$records = self::$db->query($sql)->fetchAll();
return $records;
}
self::init(); - uztaisa vai pārliecinās, ka ir
savienojums ar datu bāzi