Интеграция ORM в Doka25C

Обзор ORM

ORM (Object-Relational Mapping) — это технология, которая позволяет работать с базой данных, используя объектно-ориентированную модель вместо SQL-запросов.

В Doka25C ORM реализуется через встроенные возможности CodeIgniter Model, а также возможны альтернативные решения, такие как Doctrine ORM и Eloquent.

Работа с пользователями через CodeIgniter Model

CodeIgniter 4 предоставляет встроенный ORM-слой, который упрощает работу с базами данных.

Создание модели пользователя

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


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 $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()]);
        }
    }
}
        

Аутентификация пользователя

Пример метода для авторизации:


public function login()
{
    $model = new UserModel();
    $email = $this->request->getPost('email');
    $password = $this->request->getPost('password');

    $user = $model->where('email', $email)->first();

    if ($user && password_verify($password, $user['password_hash'])) {
        session()->set(['user_id' => $user['id'], 'isLoggedIn' => true]);
        return redirect()->to('/dashboard');
    } else {
        return view('login', ['error' => 'Неверный email или пароль']);
    }
}
        

Альтернативные ORM

Doctrine ORM

Doctrine — мощная ORM, позволяющая работать с объектами как с сущностями БД. Для интеграции с Doka25C установите:

composer require doctrine/orm

Пример определения сущности в Doctrine:


use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User
{
    /** @ORM\Id @ORM\Column(type="integer") @ORM\GeneratedValue */
    private $id;
    
    /** @ORM\Column(type="string") */
    private $name;
    
    /** @ORM\Column(type="string") */
    private $email;
}
        

Eloquent ORM

Если вы знакомы с Laravel, то вам может быть удобнее использовать Eloquent:

composer require illuminate/database

Пример модели Eloquent:


use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'users';
    protected $fillable = ['name', 'email', 'password'];
}
        

Query Builder в CodeIgniter 4

CodeIgniter 4 также предоставляет удобный Query Builder для работы с базой данных:


$db = db_connect();
$query = $db->table('users')->where('id', 1)->get();
$user = $query->getRowArray();
        

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

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