ORM (Object-Relational Mapping) — это технология, которая позволяет работать с базой данных, используя объектно-ориентированную модель вместо SQL-запросов.
В Doka25C ORM реализуется через встроенные возможности CodeIgniter Model, а также возможны альтернативные решения, такие как Doctrine ORM и Eloquent.
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 или пароль']);
}
}
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;
}
Если вы знакомы с Laravel, то вам может быть удобнее использовать Eloquent:
composer require illuminate/database
Пример модели Eloquent:
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
}
CodeIgniter 4 также предоставляет удобный Query Builder для работы с базой данных:
$db = db_connect();
$query = $db->table('users')->where('id', 1)->get();
$user = $query->getRowArray();