{"id":28534,"date":"2018-04-28T14:38:49","date_gmt":"2018-04-28T12:38:49","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28534"},"modified":"2018-04-28T14:38:49","modified_gmt":"2018-04-28T12:38:49","slug":"orm-active-record-vs-data-mapper","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/","title":{"rendered":"ORM: Active Record vs. Data Mapper"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>Everybody building a web application with a modern framework, is already probably using an <a href=\"https:\/\/en.wikipedia.org\/wiki\/Object-relational_mapping\">ORM<\/a> (Object-Relational Mapping).\u00a0 Most frameworks include one out of the box.\u00a0 But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly.<\/p>\n<p>Most variations are coming from two main approaches: <a href=\"https:\/\/en.wikipedia.org\/wiki\/Active_record_pattern\">Active Record<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_mapper_pattern\">Data Mapper<\/a>.\u00a0 I&#8217;ve heard the terms for a long time, but today decided to look into the meaning and the actual difference.<\/p>\n<p>The two approaches seem very similar.\u00a0 The difference is described in a multitude of articles online.\u00a0 I particularly liked <a href=\"https:\/\/www.culttt.com\/2014\/06\/18\/whats-difference-active-record-data-mapper\/\">this one<\/a>.\u00a0 In essence, Active Record is a better choice for simpler, CRUD-based applications.\u00a0 Data Mapper, on the other hand, is better for domain-specific applications, as it provides another level of abstraction between the domain objects and the persistence layer.<\/p>\n<p>Most of my work these days is done with <a href=\"https:\/\/cakephp.org\/\">CakePHP framework<\/a>, which I now thought uses the Active Record pattern.\u00a0 But it turns out that <a href=\"https:\/\/book.cakephp.org\/3.0\/en\/orm.html\">CakePHP ORM<\/a> so powerful, because it&#8217;s more than just one of those:<\/p>\n<blockquote><p>The CakePHP ORM borrows ideas and concepts from both ActiveRecord and Datamapper patterns. It aims to create a hybrid implementation that combines aspects of both patterns to create a fast, simple to use ORM.<\/p><\/blockquote>\n<p>It looks like I need to do some learning and dig deeper into the subject.\u00a0 Pointers are welcome.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping).\u00a0 Most frameworks include one out of the box.\u00a0 But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.\u00a0 &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">ORM: Active Record vs. Data Mapper<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"ORM: Active Record vs. Data Mapper #WebDev #PHP #CakePHP #databases #ORM #DesignPatterns","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[1537,1559,3136,38,1330],"keyring_services":[],"class_list":["post-28534","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-cakephp","tag-databases","tag-design-patterns","tag-php","tag-web-development"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2018-04-28T12:38:49+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2018-04-28T12:38:49+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#blogposting\",\"name\":\"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov\",\"headline\":\"ORM: Active Record vs. Data Mapper\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#articleImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"},\"datePublished\":\"2018-04-28T14:38:49+02:00\",\"dateModified\":\"2018-04-28T14:38:49+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#webpage\"},\"articleSection\":\"All, Programming, Technology, Web work, CakePHP, databases, design patterns, PHP, web development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"position\":3,\"name\":\"Programming\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#listItem\",\"name\":\"ORM: Active Record vs. Data Mapper\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#listItem\",\"position\":4,\"name\":\"ORM: Active Record vs. Data Mapper\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/\",\"name\":\"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov\",\"description\":\"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2018\\\/04\\\/28\\\/orm-active-record-vs-data-mapper\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2018-04-28T14:38:49+02:00\",\"dateModified\":\"2018-04-28T14:38:49+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov","description":"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#blogposting","name":"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov","headline":"ORM: Active Record vs. Data Mapper","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#articleImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"},"datePublished":"2018-04-28T14:38:49+02:00","dateModified":"2018-04-28T14:38:49+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#webpage"},"articleSection":"All, Programming, Technology, Web work, CakePHP, databases, design patterns, PHP, web development"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","position":3,"name":"Programming","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#listItem","name":"ORM: Active Record vs. Data Mapper"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#listItem","position":4,"name":"ORM: Active Record vs. Data Mapper","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/","name":"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov","description":"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2018-04-28T14:38:49+02:00","dateModified":"2018-04-28T14:38:49+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov","og:description":"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.","og:url":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2018-04-28T12:38:49+00:00","article:modified_time":"2018-04-28T12:38:49+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"ORM: Active Record vs. Data Mapper - Leonid Mamchenkov","twitter:description":"Everybody building a web application with a modern framework, is already probably using an ORM (Object-Relational Mapping). Most frameworks include one out of the box. But digging deeper into the subject, ORMs do vary from each other, and some cases, very significantly. Most variations are coming from two main approaches: Active Record and Data Mapper.","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"28534","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-19 15:23:25","updated":"2026-01-15 13:38:44","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/\" title=\"Programming\">Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tORM: Active Record vs. Data Mapper\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Programming","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/"},{"label":"ORM: Active Record vs. Data Mapper","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/28\/orm-active-record-vs-data-mapper\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":28355,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/01\/31\/automapper-declarative-data-mapper-for-php-7\/","url_meta":{"origin":28534,"position":0},"title":"AutoMapper &#8211; Declarative data mapper for PHP 7","author":"Leonid Mamchenkov","date":"January 31, 2018","format":false,"excerpt":"AutoMapper can map data from array\/object to existing array\/object or marshal a new one. Mapping rules specified in declarative way using three simple definitions: From\u00a0definition (From::create\u00a0or via short function\u00a0from) \u2014 maps single field from source to target. Supports chainable functions: ->convert(callable $callable)\u00a0\u2014 converts input value to another one via any\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":24147,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/05\/20\/cakephp-3-orm\/","url_meta":{"origin":28534,"position":1},"title":"CakePHP 3 ORM","author":"Leonid Mamchenkov","date":"May 20, 2015","format":"status","excerpt":"https:\/\/twitter.com\/cakephp\/status\/600970761004851200","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":13328,"url":"https:\/\/mamchenkov.net\/wordpress\/2010\/08\/31\/orm-designer\/","url_meta":{"origin":28534,"position":2},"title":"ORM Designer","author":"Leonid Mamchenkov","date":"August 31, 2010","format":false,"excerpt":"Here is a tool that might help you with your MVC framework, like CakePHP, Symfony, and others - ORM Designer. \u00a0In\u00a0essence, it is a graphical user interface for drawing a visual representation of your project (such as an Entity Relationship Diagram (ERD)) and than converting it into the code. \u00a0You\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2010\/08\/orm_designer-500x268.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":19006,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/12\/20\/redbeanphp-a-lightweight-configuration-less-orm-library-for-php\/","url_meta":{"origin":28534,"position":3},"title":"RedBeanPHP &#8211; a lightweight, configuration-less ORM library for PHP","author":"Leonid Mamchenkov","date":"December 20, 2013","format":"link","excerpt":"RedBeanPHP - a lightweight, configuration-less ORM library for PHP","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28627,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/06\/12\/inflected-a-port-of-activesupports-inflector-to-node-js-and-the-browser\/","url_meta":{"origin":28534,"position":4},"title":"Inflected &#8211; a port of ActiveSupport&#8217;s inflector to Node.js and the browser","author":"Leonid Mamchenkov","date":"June 12, 2018","format":false,"excerpt":"For the last few years I have been heavily involved in building web applications with the CakePHP framework.\u00a0 Apart from all the usual MVC, ORM, and so on, and so forth, features, I am a big fan of the CakePHP utilities.\u00a0 And among all of them, my long time favorite\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22103,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/07\/01\/cakephp-3-here-we-go-again\/","url_meta":{"origin":28534,"position":5},"title":"CakePHP 3, here we go again.","author":"Leonid Mamchenkov","date":"July 1, 2014","format":false,"excerpt":"As some of you might know, I'm a big fan of CakePHP framework. \u00a0I've used it on numerous projects since the beginning of times. \u00a0I've built projects small and large, migrated existing native PHP codebases to CakePHP and even survived a few major CakePHP upgrades - 1.2 to 2.0 comes\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28534"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28534\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28534"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}