SlideShare a Scribd company logo
Doctrine ORM in Joomla!
Herman Peeren, Yepr
J & Beyond, June 1, 2013
Jooctrine
Remember Flipper?
On the menu:
1.	 What is Object Relational Mapping?
2.	 Doctrine2 ORM -> Joomla! extensions
3.	 possibilities to improve Joomla!’s core?
What is ORM?
Object Relational Mapping
Mapping some knight-objects...
... to their proper tables
•	model:
•	JTable (& other) objects
•	JTableContent
•	WeblinksTableWeblink
•	JTableUser, JUser
•	 collection
•	 object / item (entity)
•	relational database:
•	tables
•	 #__content
•	 #__weblinks
•	 #__users
•	 table
•	 row
Simple “mapping” in Joomla!
•	 1NF = only atomic fields
BUT:
•	 user could have multiple
- (email) addresses,
- skills,
- friends,
- partners...
Mapping Layer
•	 layer between the objects and the tables
•	 mapping associations
Association mapping
•	 one to one
•	 one to many
•	 many to many
In relational database
traversed with foreign keys + joins
You get the whole thing together
Objects traversal:
// Listing streets per customer
foreach ($customers as $customer)
{
echo $customer->getName().’<br />’;
foreach ($customer->getAdresses() as $address) // Lazy Loading
{
echo ‘<li>’.$address->getStreet()</li>;
}
}
Collections
•	 ArrayCollection class in
DoctrineCommon (Collection interface)
•	 Lazy vs eager loading
•	 Transitive persistence (cascades)
Splitting in layers:
•	 domain layer (the entities)
•	 mapping layer
(with persistence API)
•	 data layer (the database)
Transparent persistence
•	 the entities (objects) themselves don’t know anything
about persistence
•	 N.B.: JTable = Active Record
= entities are table rows with CRUD
Unit of Work
update of
customer name, address and creditlimit
with Doctrine:
// this is done in memory, in the customer repository:
$customer->setName(‘Richy’);
$customer->setCreditlimit(10000);
// $address is an address-object, that has been set before
$customer->setAddress($address);
// and the changes are made permanent in the database
$em->flush();
Defining the mapping
In Doctrine the mapping can be defined
in 4 ways:
•	 annotations
•	 xml
•	 yml
•	 php
The mapping information is stored in ClassMetadata in-
stances (which are cached in a production environment)
ORM Designer
visual mapping tool (not Free!):
http://www.orm-designer.com/
Command line tool
•	 db-schema generation!
•	 direction: from mapping info to db,
not the other way around!!!
•	 and entity-generation
Inheritance mapping
•	 concrete table inheritance
(a.k.a.: mapped superclass)
•	 class table inheritance
(a.k.a.: joined table inheritance)
•	 one table inheritance
(a.k.a.: single table inheritance)
Zie Fowler’s PEAA
(images 2 next pages)
Concrete Table inheritance
Class Table inheritance
NoSql-mapping
•	 Doctrine ODM (a.o. MongoDB)
•	 easy switching ORM - ODM
•	 mix for instance MySql and MongoDB:
http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/cookbook/
mapping-classes-to-orm-and-odm.html
DQL
Doctrine Query Language
•	 looks like SQL,
but querying the entities, not the tables
•	 querybuilder
// Query addresses per customer with fetch-join: eager loading
$query = $em->createQuery(“SELECT c, a
FROM Customer c JOIN c.addresses a”);
$customers = $query->getResult();
Doctrine2 documentation•	 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/index.html
Using Doctrine2 ORM
for Joomla! extensions
•	 installation via composer
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/configura-
tion.html
•	 Also see articles Paul de Raay:
http://www.paulderaaij.nl/tag/doctrine/
•	 Adding a prefix (see cookbook):
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/sql-table-
prefixes.html
Jooctrine-package version 0.1
for easy use, including:
•	 latest Doctrine2
•	 + bootstrap.php
•	 + jooctrinemodel.php
•	 + prefix listener
download from jooctrine.org
will be installed in libraries/doctrine
(for easy plug and play; to be continued)
// using Joomla config-info
$joomlaConfig = JFactory::getConfig();
$dbParams = array(
			‘driver’ => ‘pdo_mysql’,
			‘path’ => ‘database.mysql’,
			‘charset’ => ‘utf8’,
			 ‘host’ => $joomlaConfig->get(‘host’),
			 ‘dbname’ => $joomlaConfig->get(‘db’),
			 ‘user’ => $joomlaConfig->get(‘user’),
			 ‘password’ => $joomlaConfig->get(‘password’)
		);
// idem: the prefix
$prefix = $joomlaConfig->get(‘dbprefix’);
extend model from JooctrineModel
entity manager: $this->em
•	 I use 1 model in a component (my “domainmodel”)
•	 this model is used with several views
Jooctrine - Doctrine ORM in Joomla!
What I came across
making a Joomla-extension with this:
•	 it is easy to use Doctrine in Joomla! Great possibilities!
BUT:
•	 change a basic building block and a lot changes
•	 many things don’t function anymore ...
•	 singular or plural view is essential in Joomla!
•	 also: 1 table row = 1 entity with atomic fields
Change a basic building block
and ...
possibilities to improve
Joomla!’s core?
•	 hierarchies, nested associations without JTableNested
•	 fields can be objects, objects can be collections
•	 UCM: mapping and structure separated
•	 stucture in model; no HMVC mis-use
•	 better OOP, beyond the db-normalisation paradigm
•	 easier Language associations (Flipper always returns)
Questions?
Thank you!
more info and download:
www.jooctrine.org
contact:
herman@yepr.nl
www.hermanpeeren.nl
www.yepr.eu
illustrations:
www.redcheeksfactory.com

More Related Content

What's hot (20)

ZIP
Drupal Development (Part 2)
Jeff Eaton
 
KEY
Development Approach
alexkingorg
 
PPTX
Let's write secure Drupal code! - Drupal Camp Poland 2019
Balázs Tatár
 
PPTX
Drupal 8 Hooks
Sathya Sheela Sankaralingam
 
ZIP
What's new in the Drupal 7 API?
Alexandru Badiu
 
PDF
Field api.From d7 to d8
Pavel Makhrinsky
 
PDF
The State of Lithium
Nate Abele
 
PDF
Advanced Querying with CakePHP 3
José Lorenzo Rodríguez Urdaneta
 
ODP
Writing Drupal 5 Module
Sammy Fung
 
PPTX
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Balázs Tatár
 
PDF
Designing a JavaFX Mobile application
Fabrizio Giudici
 
PDF
Lithium: The Framework for People Who Hate Frameworks
Nate Abele
 
PPTX
Drupal 8 migrate!
Pavel Makhrinsky
 
PDF
Drupal 8: Entities
drubb
 
PPTX
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Balázs Tatár
 
PDF
New in cakephp3
markstory
 
PDF
Any tutor
Yun-Yan Chi
 
PPTX
Drupal 7 — Circle theme
Kirill Borzov
 
PDF
Doctrine 2
zfconfua
 
Drupal Development (Part 2)
Jeff Eaton
 
Development Approach
alexkingorg
 
Let's write secure Drupal code! - Drupal Camp Poland 2019
Balázs Tatár
 
What's new in the Drupal 7 API?
Alexandru Badiu
 
Field api.From d7 to d8
Pavel Makhrinsky
 
The State of Lithium
Nate Abele
 
Advanced Querying with CakePHP 3
José Lorenzo Rodríguez Urdaneta
 
Writing Drupal 5 Module
Sammy Fung
 
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Balázs Tatár
 
Designing a JavaFX Mobile application
Fabrizio Giudici
 
Lithium: The Framework for People Who Hate Frameworks
Nate Abele
 
Drupal 8 migrate!
Pavel Makhrinsky
 
Drupal 8: Entities
drubb
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Balázs Tatár
 
New in cakephp3
markstory
 
Any tutor
Yun-Yan Chi
 
Drupal 7 — Circle theme
Kirill Borzov
 
Doctrine 2
zfconfua
 

Viewers also liked (11)

PDF
ORM: Object-relational mapping
Abhilash M A
 
PDF
Webinar: Hibernate - the ultimate ORM framework
Edureka!
 
PPTX
Thinking Beyond ORM in JPA
Patrycja Wegrzynowicz
 
PDF
#jd12nl Seblod 2
Herman Peeren
 
PPT
Doctrine 2 - Introduction
Diego Lewin
 
PPTX
How Pony ORM translates Python generators to SQL queries
ponyorm
 
PDF
Overview of JPA (Java Persistence API) v2.0
Bryan Basham
 
PPT
Object Relational model for SQLIite in android
yugandhar vadlamudi
 
PPTX
2 tier and 3 tier architecture
baabtra.com - No. 1 supplier of quality freshers
 
PPTX
Python PPT
Edureka!
 
PPT
Introduction to Python
Nowell Strite
 
ORM: Object-relational mapping
Abhilash M A
 
Webinar: Hibernate - the ultimate ORM framework
Edureka!
 
Thinking Beyond ORM in JPA
Patrycja Wegrzynowicz
 
#jd12nl Seblod 2
Herman Peeren
 
Doctrine 2 - Introduction
Diego Lewin
 
How Pony ORM translates Python generators to SQL queries
ponyorm
 
Overview of JPA (Java Persistence API) v2.0
Bryan Basham
 
Object Relational model for SQLIite in android
yugandhar vadlamudi
 
2 tier and 3 tier architecture
baabtra.com - No. 1 supplier of quality freshers
 
Python PPT
Edureka!
 
Introduction to Python
Nowell Strite
 
Ad

Similar to Jooctrine - Doctrine ORM in Joomla! (20)

PDF
Staying Sane with Drupal NEPHP
Oscar Merida
 
PPTX
REST APIs in Laravel 101
Samantha Geitz
 
PPTX
JS Essence
Uladzimir Piatryka
 
PDF
Advanced Php - Macq Electronique 2010
Michelangelo van Dam
 
KEY
Object Relational Mapping in PHP
Rob Knight
 
PPTX
Php on the Web and Desktop
Elizabeth Smith
 
PPTX
Bioinformatica p6-bioperl
Prof. Wim Van Criekinge
 
PDF
Symfony2 and Doctrine2 Integration
Jonathan Wage
 
KEY
Fapi
Steven Rifkin
 
PPTX
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Prof. Wim Van Criekinge
 
PDF
Drupal 8, Where Did the Code Go? From Info Hook to Plugin
Acquia
 
PPTX
Jquery fundamentals
Salvatore Fazio
 
KEY
Scaling php applications with redis
jimbojsb
 
PDF
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
PDF
Drupal Security from Drupalcamp Bratislava
Gábor Hojtsy
 
PDF
Tools and Tips for Moodle Developers - #mootus16
Dan Poltawski
 
PDF
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
Doris Chen
 
PDF
Refactoring
Artem Tabalin
 
PDF
OOP Adventures with XOOPS
xoopsproject
 
PDF
The Solar Framework for PHP 5 (2010 Confoo)
Paul Jones
 
Staying Sane with Drupal NEPHP
Oscar Merida
 
REST APIs in Laravel 101
Samantha Geitz
 
JS Essence
Uladzimir Piatryka
 
Advanced Php - Macq Electronique 2010
Michelangelo van Dam
 
Object Relational Mapping in PHP
Rob Knight
 
Php on the Web and Desktop
Elizabeth Smith
 
Bioinformatica p6-bioperl
Prof. Wim Van Criekinge
 
Symfony2 and Doctrine2 Integration
Jonathan Wage
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Prof. Wim Van Criekinge
 
Drupal 8, Where Did the Code Go? From Info Hook to Plugin
Acquia
 
Jquery fundamentals
Salvatore Fazio
 
Scaling php applications with redis
jimbojsb
 
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini
 
Drupal Security from Drupalcamp Bratislava
Gábor Hojtsy
 
Tools and Tips for Moodle Developers - #mootus16
Dan Poltawski
 
jQuery Makes Writing JavaScript Fun Again (for HTML5 User Group)
Doris Chen
 
Refactoring
Artem Tabalin
 
OOP Adventures with XOOPS
xoopsproject
 
The Solar Framework for PHP 5 (2010 Confoo)
Paul Jones
 
Ad

More from Herman Peeren (20)

PDF
ProjectionalForms-2023-11-14.pdf
Herman Peeren
 
PDF
ExtensionGenerator-JoomlaDagen2023-slides.pdf
Herman Peeren
 
PDF
Cut & Shave
Herman Peeren
 
PDF
Programmeren, talen en het begrijpen van de wereld
Herman Peeren
 
PDF
Dci in PHP
Herman Peeren
 
PDF
Improve our PHP code with ideas from Functional Programming
Herman Peeren
 
PDF
DCI DDD-BE April 2015
Herman Peeren
 
PDF
Design patterns illustrated-2015-03
Herman Peeren
 
PDF
Event Sourcing
Herman Peeren
 
PDF
Next Generation Joomla!
Herman Peeren
 
PDF
Behat, Behavioral Driven Development (BDD) in PHP
Herman Peeren
 
PDF
Design patterns illustrated 010PHP
Herman Peeren
 
PDF
Print, geen kunst aan
Herman Peeren
 
PDF
#jd12nl Joomla 2.5 extensies
Herman Peeren
 
PDF
Jug010 120320-templates
Herman Peeren
 
PDF
Joomla2.0 architecture
Herman Peeren
 
PDF
Webservices: connecting Joomla! with other programs.
Herman Peeren
 
PDF
Commercial gpljoomla
Herman Peeren
 
PDF
Design Patterns Illustrated
Herman Peeren
 
PPS
Flash templates for Joomla!
Herman Peeren
 
ProjectionalForms-2023-11-14.pdf
Herman Peeren
 
ExtensionGenerator-JoomlaDagen2023-slides.pdf
Herman Peeren
 
Cut & Shave
Herman Peeren
 
Programmeren, talen en het begrijpen van de wereld
Herman Peeren
 
Dci in PHP
Herman Peeren
 
Improve our PHP code with ideas from Functional Programming
Herman Peeren
 
DCI DDD-BE April 2015
Herman Peeren
 
Design patterns illustrated-2015-03
Herman Peeren
 
Event Sourcing
Herman Peeren
 
Next Generation Joomla!
Herman Peeren
 
Behat, Behavioral Driven Development (BDD) in PHP
Herman Peeren
 
Design patterns illustrated 010PHP
Herman Peeren
 
Print, geen kunst aan
Herman Peeren
 
#jd12nl Joomla 2.5 extensies
Herman Peeren
 
Jug010 120320-templates
Herman Peeren
 
Joomla2.0 architecture
Herman Peeren
 
Webservices: connecting Joomla! with other programs.
Herman Peeren
 
Commercial gpljoomla
Herman Peeren
 
Design Patterns Illustrated
Herman Peeren
 
Flash templates for Joomla!
Herman Peeren
 

Recently uploaded (20)

PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
PDF
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
PDF
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
PDF
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
PDF
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
PDF
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Chris Elwell Woburn, MA - Passionate About IT Innovation
Chris Elwell Woburn, MA
 
Log-Based Anomaly Detection: Enhancing System Reliability with Machine Learning
Mohammed BEKKOUCHE
 
CIFDAQ Weekly Market Wrap for 11th July 2025
CIFDAQ
 
Presentation - Vibe Coding The Future of Tech
yanuarsinggih1
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
HubSpot Main Hub: A Unified Growth Platform
Jaswinder Singh
 
Jak MŚP w Europie Środkowo-Wschodniej odnajdują się w świecie AI
dominikamizerska1
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
Agentic AI lifecycle for Enterprise Hyper-Automation
Debmalya Biswas
 
The Builder’s Playbook - 2025 State of AI Report.pdf
jeroen339954
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
How Startups Are Growing Faster with App Developers in Australia.pdf
India App Developer
 

Jooctrine - Doctrine ORM in Joomla!

  • 1. Doctrine ORM in Joomla! Herman Peeren, Yepr J & Beyond, June 1, 2013 Jooctrine
  • 3. On the menu: 1. What is Object Relational Mapping? 2. Doctrine2 ORM -> Joomla! extensions 3. possibilities to improve Joomla!’s core?
  • 4. What is ORM? Object Relational Mapping
  • 5. Mapping some knight-objects... ... to their proper tables
  • 6. • model: • JTable (& other) objects • JTableContent • WeblinksTableWeblink • JTableUser, JUser • collection • object / item (entity) • relational database: • tables • #__content • #__weblinks • #__users • table • row Simple “mapping” in Joomla!
  • 7. • 1NF = only atomic fields BUT: • user could have multiple - (email) addresses, - skills, - friends, - partners...
  • 8. Mapping Layer • layer between the objects and the tables • mapping associations
  • 9. Association mapping • one to one • one to many • many to many In relational database traversed with foreign keys + joins You get the whole thing together
  • 10. Objects traversal: // Listing streets per customer foreach ($customers as $customer) { echo $customer->getName().’<br />’; foreach ($customer->getAdresses() as $address) // Lazy Loading { echo ‘<li>’.$address->getStreet()</li>; } }
  • 11. Collections • ArrayCollection class in DoctrineCommon (Collection interface) • Lazy vs eager loading • Transitive persistence (cascades)
  • 12. Splitting in layers: • domain layer (the entities) • mapping layer (with persistence API) • data layer (the database)
  • 13. Transparent persistence • the entities (objects) themselves don’t know anything about persistence • N.B.: JTable = Active Record = entities are table rows with CRUD
  • 14. Unit of Work update of customer name, address and creditlimit with Doctrine: // this is done in memory, in the customer repository: $customer->setName(‘Richy’); $customer->setCreditlimit(10000); // $address is an address-object, that has been set before $customer->setAddress($address); // and the changes are made permanent in the database $em->flush();
  • 15. Defining the mapping In Doctrine the mapping can be defined in 4 ways: • annotations • xml • yml • php The mapping information is stored in ClassMetadata in- stances (which are cached in a production environment)
  • 16. ORM Designer visual mapping tool (not Free!): http://www.orm-designer.com/
  • 17. Command line tool • db-schema generation! • direction: from mapping info to db, not the other way around!!! • and entity-generation
  • 18. Inheritance mapping • concrete table inheritance (a.k.a.: mapped superclass) • class table inheritance (a.k.a.: joined table inheritance) • one table inheritance (a.k.a.: single table inheritance) Zie Fowler’s PEAA (images 2 next pages)
  • 21. NoSql-mapping • Doctrine ODM (a.o. MongoDB) • easy switching ORM - ODM • mix for instance MySql and MongoDB: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/cookbook/ mapping-classes-to-orm-and-odm.html
  • 22. DQL Doctrine Query Language • looks like SQL, but querying the entities, not the tables • querybuilder // Query addresses per customer with fetch-join: eager loading $query = $em->createQuery(“SELECT c, a FROM Customer c JOIN c.addresses a”); $customers = $query->getResult();
  • 24. Using Doctrine2 ORM for Joomla! extensions • installation via composer http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/configura- tion.html • Also see articles Paul de Raay: http://www.paulderaaij.nl/tag/doctrine/ • Adding a prefix (see cookbook): http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/sql-table- prefixes.html
  • 25. Jooctrine-package version 0.1 for easy use, including: • latest Doctrine2 • + bootstrap.php • + jooctrinemodel.php • + prefix listener download from jooctrine.org will be installed in libraries/doctrine (for easy plug and play; to be continued)
  • 26. // using Joomla config-info $joomlaConfig = JFactory::getConfig(); $dbParams = array( ‘driver’ => ‘pdo_mysql’, ‘path’ => ‘database.mysql’, ‘charset’ => ‘utf8’, ‘host’ => $joomlaConfig->get(‘host’), ‘dbname’ => $joomlaConfig->get(‘db’), ‘user’ => $joomlaConfig->get(‘user’), ‘password’ => $joomlaConfig->get(‘password’) ); // idem: the prefix $prefix = $joomlaConfig->get(‘dbprefix’); extend model from JooctrineModel entity manager: $this->em • I use 1 model in a component (my “domainmodel”) • this model is used with several views
  • 28. What I came across making a Joomla-extension with this: • it is easy to use Doctrine in Joomla! Great possibilities! BUT: • change a basic building block and a lot changes • many things don’t function anymore ... • singular or plural view is essential in Joomla! • also: 1 table row = 1 entity with atomic fields
  • 29. Change a basic building block and ...
  • 30. possibilities to improve Joomla!’s core? • hierarchies, nested associations without JTableNested • fields can be objects, objects can be collections • UCM: mapping and structure separated • stucture in model; no HMVC mis-use • better OOP, beyond the db-normalisation paradigm • easier Language associations (Flipper always returns)
  • 32. Thank you! more info and download: www.jooctrine.org contact: [email protected] www.hermanpeeren.nl www.yepr.eu illustrations: www.redcheeksfactory.com