Modelom nazivamo sve ono u PHP (ili bilo kojem jeziku) što radi sa bazom
podataka. To su klase, validacija i wrapper funkcije/metode.
Prije ovoga bacite oko na ovu objavu i ne bi bilo loše da prelistamo querybuilder dokumentaciju.
U CodeIgniteru pristupne podatke unosimo u .env datoteku.
#-------------------------------------------------------------------- # DATABASE #-------------------------------------------------------------------- database.default.hostname = localhost database.default.database = ci4_app database.default.username = root database.default.password = root database.default.DBDriver = MySQLi
Datoteku modela pravimo sa:
php spark make:model User --suffix
Datoteke modela su u “/app/Models” direktoriju. Takva datoteka je
povezana s jednom tablicom. Tamo određujemo koji su stupci dozvoljeni:
protected $allowedFields = [ "name", "email", ];
Tu imamo i validacijske postavke:
// Validation protected $validationRules = [ "name" => "required|min_length[3]|max_length[120]", "email" => "required|valid_email|min_length[5]|is_unique[tbl_members.email]", ]; protected $validationMessages = [ "name" => [ "required" => "Name is required", "min_length" => "Minimum length of name should be 3 chars", "max_length" => "Maximum length of name should be 128 chars", ], "email" => [ "required" => "Email needed", "valid_email" => "Please provide a valid email address" ], ];
Više filtera validacija imamo na stranici ovdje:
https://codeigniter4.github.io/userguide/libraries/validation.html#available-rules
Greške validacije
Ispravnost metoda modela možemo provjeriti sa vraćenom bool (true/false) vrijednosti. A ako imamo “CI_ENVIRONMENT = development” u .env datoteci umjesto negativnog boola vraćena vrijednost će sadržavati opis greške.
if ($employeeModel->insert($data)) { $this->response->setStatusCode(200); return $this->response->setJSON(['OK']); } else { $this->response->setStatusCode(500); return $this->response->setJSON(['FAIL']); }
Moguće greške dobivamo i sa:
$userModel->errors();
Ovo gore možemo poslati kao varijablu predlošaka:
return view('moj-template', [ 'errors' => $memberModel->errors() ]);
Kontroler
Prvo moramo uvesti datoteku modela:
use App\Models\UserModel;
Zatim u metodi:
$userModel = new UserModel(); $data = [ [ "name" => "damir", "email" => "damir@gmail.com", ], [ "name" => "dsijak", "email" => "dsijak@gmail.com", ], ]; $return_data = $userModel->insertBatch($data);
Ako želimo ubaciti samo jedan red:
$return_data = $userModel->insert($data);
Da izaberemo samo jedan red po id-u:
$worksiteModel = new WorksiteModel(); $query = $worksiteModel->getWhere(['id' => $worksiteId]); $result = $query->getResult(); //ili $worksiteModel = new WorksiteModel(); $query = $worksiteModel->select('*')->where('id', $id)->get(); $result = $query->getResult();
Ako već imamo podatke u bazi na ovaj način obnavljamo podatke u bazi:
$userModel = new UserModel(); $data = [ "name" => "Novo ime", "email" => "novoIme@gmail.com", ]; return $userModel->where([ "id" => 101, ])->set($data)->update();
Brisanje iz baze podataka izvodimo ovako:
$userModel = new UserModel(); return $userModel->where([ "id" => 101, ])->delete();
Pretraživanje (sql like)
$builder->like('title', 'match'); // Produces: WHERE `title` LIKE '%match%' ESCAPE '!'
Više na docs.
Da dobijemo sve podatke iz baze podataka koristimo:
$query = $builder->get(); // SELECT * FROM mytable foreach ($query->getResult() as $row) { echo $row->title; //prikaži stupac "title" }
Ili ako nam treba za paginaciju:
$query = $builder->get(10, 20); // SELECT * FROM mytable LIMIT 20, 10