Upgrade Models¶
What has been changed¶
- The CI4 model has much more functionality, including automatic database connection, basic CRUD, in-model validation, and automatic pagination.
- Since namespaces has been added to CodeIgniter 4, the models must be changed to support namespaces.
Upgrade Guide¶
- First, move all model files to the folder
app/Models
. - Add this line just after the opening php tag:
namespace App\Models;
. - Below the
namespace App\Models;
line add this line:use CodeIgniter\Model;
. - Replace
extends CI_Model
withextends Model
. - Instead of CI3’s
$this->load->model(x);
, you would now use$this->x = new X();
, following namespaced conventions for your component. Alternatively, you can use themodel
function:$this->x = model('X');
.
If you use sub-directories in your model structure you have to change the namespace according to that.
Example: You have a version 3 model located in application/models/users/user_contact.php
the namespace has to be namespace App\Models\Users;
and the model path in the version 4 should look like this: app/Models/Users/UserContact.php
The new Model in CI4 has a lot of built-in methods. For example, the find($id)
method. With this you can find data where the primary key is equal to $id
.
Inserting data is also easier than before. In CI4 there is an insert($data)
method. You can optionally make use of all those built-in methods and migrate your code to the new methods.
You can find more information to those methods here.
Code Example¶
Codeigniter Version 3.11¶
Path: application/models
:
<?php
class User_contact extends CI_Model
{
public function insert($name, $address, $email)
{
$this->db->insert('user_contacts', array(
"name" => $name,
"address" => $address,
"email" => $email,
));
}
}
Codeigniter Version 4.x¶
Path: app/Models
:
<?php
namespace App\Models;
use CodeIgniter\Model;
class UserContact extends Model
{
// insert() method already implemented in parent
}
To insert data you can just directly call the $model->insert()
method because this method is built-in since CI 4.