Создание моделей данных в CodeIgniter 4

Введение

CodeIgniter 4 использует систему моделей для удобного взаимодействия с базой данных. Модели упрощают работу с данными, позволяя выполнять CRUD-операции без необходимости писать SQL-запросы вручную.

Создание модели

Модели в CodeIgniter 4 хранятся в папке app/Models и должны наследовать класс CodeIgniter\Model. Рассмотрим создание базовой модели:


namespace App\Models;
use CodeIgniter\Model;

class BaseModel extends Model
{
    protected $table      = 'table_name';
    protected $primaryKey = 'id';
    protected $allowedFields = ['field1', 'field2', 'field3'];
}
        

Пример модели пользователя

Создадим модель для работы с таблицей пользователей. Она включает в себя поддержку авторизации через соцсети, валидацию данных и временные метки:


namespace App\Models;
use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table      = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = [
        'username', 'email', 'password_hash', 'auth_provider', 'auth_id', 
        'full_name', 'birth_date', 'address', 'phone', 'avatar',
        'is_verified', 'verification_token', 'last_login'
    ];
    protected $returnType = 'array';
    protected $useTimestamps = true;
    protected $createdField  = 'created_at';
    protected $updatedField  = 'last_login';

    protected $validationRules = [
        'email' => 'required|valid_email|is_unique[users.email]',
        'username' => 'required|min_length[3]|max_length[50]|is_unique[users.username]',
        'password_hash' => 'required|min_length[8]',
    ];

    protected $validationMessages = [
        'email' => [
            'required' => 'Поле Email обязательно для заполнения.',
            'valid_email' => 'Введите корректный Email.',
            'is_unique' => 'Такой Email уже зарегистрирован.',
        ],
        'username' => [
            'required' => 'Поле Имя пользователя обязательно.',
            'min_length' => 'Имя пользователя должно содержать не менее 3 символов.',
            'max_length' => 'Имя пользователя должно содержать не более 50 символов.',
            'is_unique' => 'Такое имя пользователя уже занято.',
        ],
        'password_hash' => [
            'required' => 'Пароль обязателен.',
            'min_length' => 'Пароль должен содержать не менее 8 символов.',
        ],
    ];

    protected $skipValidation = false;
}
        

Использование модели в контроллере

После создания модели можно использовать её в контроллере для работы с пользователями:


namespace App\Controllers;
use App\Models\UserModel;
use CodeIgniter\Controller;

class UsersController extends Controller
{
    public function register()
    {
        $model = new UserModel();
        $data = [
            'username' => $this->request->getPost('username'),
            'email' => $this->request->getPost('email'),
            'password_hash' => password_hash($this->request->getPost('password'), PASSWORD_DEFAULT),
            'is_verified' => 0,
            'verification_token' => bin2hex(random_bytes(16)),
        ];

        if ($model->insert($data)) {
            return redirect()->to('/register-success');
        } else {
            return view('register', ['errors' => $model->errors()]);
        }
    }
}
        

Связанные страницы

Вернуться на главную