Чем Active Record отличается от Data Mapper?

Ответ

Active Record (Eloquent) - модель = запись в таблице. Модель содержит и данные, и логику работы с БД:

$user = User::find(1);    // модель знает как загрузить себя
$user->name = 'Jane';
$user->save();             // и как сохранить

Data Mapper (Doctrine) - модель не знает о БД. Отдельный маппер (EntityManager) управляет персистенцией:

$user = $entityManager->find(User::class, 1);
$user->setName('Jane');
$entityManager->flush();   // маппер сохраняет изменения

Active Record проще, Data Mapper - чище (модель не зависит от инфраструктуры). Для сложного домена Data Mapper предпочтительнее.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.