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