SlideShare a Scribd company logo
1 of 19
Download to read offline
Schema Migration
(DB migration)
with Phinx
Hadi Ariawan
@hadiariawan
github.com/hadiariawan
What is Schema migration?
In software engineering, schema migration (also database migration, database change management)
refers to the management of incremental, reversible changes to relational database schemas.
A schema migration is performed on a database whenever it is necessary to update or revert that
database's schema to some newer or older version.
Have you ever face these situations?
● Developer A add several columns on table X, developer A commits and push the codes. Developer
B pulls the code and then the app breaks.
● Developer finishes the codes and forgot to give/email the sql alter script to DevOps/Sysadmin guy.
When DevOps deploy to production the app breaks.
● DevOps guy deploying more than 1 DB instances. Can you imagine how long it took to apply DB
changes if the instances are (for example) 10?
● …..
Why using Schema migration?
“The rule is simple. You should never tie database migrations to application deploys or vice versa. By
minimising dependencies you enable faster, easier and cleaner deployments.”
http://www.brunton-spall.co.uk/post/2014/05/06/database-migrations-done-right/
Benefits of using Schema Migration
● Separated application and database deployment.
● Ensured same DB structure through all the team member.
● Database versioning (keep track of DB structure changes).
● Easier to maintain incremental database changes.
Why Phinx?
https://phinx.org/
● Be portable amongst the most popular database vendors.
● Be PHP framework independent.
● Have a simple install process.
● Have an easy to use command-line operation.
● Integrate with various other PHP tools (Phing, PHPUnit) and web frameworks.
Why i choose phinx
● Familiar. Because it is written in PHP.
● Command line app. Easy to connect phinx to deployer tool.
● Supports most popular databases (MySQL, PostgreSQL, etc).
● Works independently/standalone. Multi platform and frameworks.
● Helpful for unit testing.
● Their documentation is easy to follow, easy to understand.
Installation
Installation is easy. Use composer!
php composer.phar require robmorgan/phinx
execute this after installation finished.
vendor/bin/phinx init
http://docs.phinx.org/en/latest/install.html
One thing Before Migrating
There should be a file named phinx.yml after you are done initialized your project.
Phinx.yml file contains your environments and database configurations.
Create a migration file
$ php vendor/bin/phinx create BrandTable
Checking migration status
Data types? Indexes? Foreign keys?
Check their documentation on this matters.
https://book.cakephp.org/3.0/en/phinx/migrations.html#working-with-columns
They are pretty straightforward and easy to follow.
Seeder
● Populate reference data
○ Rarely change data
○ Eg: Country data, User type data, etc
● Populate test data
○ Would you run sql command on PhpMyAdmin 100, 1000, 10000 times?
How to create and run a seeder
Create a seeder
$ phinx seed:create MyNewSeeder
Run a seeder
$ phinx seed:run -e development -s MyNewSeeder
Seeder Example
Here is an example of seeder.
A seeder for super user account.
This one records will be inserted in users
table.
How to generate random data in your seeder?
Use Faker! (https://github.com/fzaninotto/Faker)
How to access DB in your seeder?
Often times you encounter cases that
need current data in database in order to
generate other data. This is how you it on
phinx.
Use these 2 methods
● fetchRow()
○ For single row
● fetchAll()
○ For multiple rows
https://book.cakephp.org/3.0/en/phinx/migrations.html#fetching-rows
Tips on using Phinx
● Read the documentation thoroughly.
● Write migration wisely. Only some method can be reversed.
● Store it in version control (git) and share it with your team/colleague.
Phinx joined CakePHP family on June 2017
https://bakery.cakephp.org/2017/06/23/welcoming-phinx-to-the-cakephp-family.html
That’s All!
Now you know how, what and why you should use schema migration, right?
“Get your database under control”
Hadi Ariawan
@hadiariawan
github.com/hadiariawan

More Related Content

What's hot

Spring Batch Introduction (and Bitbucket Project)
Spring Batch Introduction (and Bitbucket Project)Spring Batch Introduction (and Bitbucket Project)
Spring Batch Introduction (and Bitbucket Project)Guillermo Daniel Salazar
 
Introduce flux & react in practice
Introduce flux & react in practiceIntroduce flux & react in practice
Introduce flux & react in practiceHsuan Fu Lien
 
Reactive Web Development with Spring Boot 2
Reactive Web Development with Spring Boot 2Reactive Web Development with Spring Boot 2
Reactive Web Development with Spring Boot 2Mike Melusky
 
Database Source Control: Migrations vs State
Database Source Control: Migrations vs StateDatabase Source Control: Migrations vs State
Database Source Control: Migrations vs StateEduardo Piairo
 
GraphQL vs. (the) REST
GraphQL vs. (the) RESTGraphQL vs. (the) REST
GraphQL vs. (the) RESTcoliquio GmbH
 
Sitecore Data Exchange Framework
Sitecore Data Exchange FrameworkSitecore Data Exchange Framework
Sitecore Data Exchange FrameworkRadek Kozłowski
 
DDD Domain Relationships Radars
DDD Domain Relationships RadarsDDD Domain Relationships Radars
DDD Domain Relationships RadarsPhilippe Bourgau
 
Moving from application automation to true DevOps by including the database
Moving from application automation to true DevOps by including the databaseMoving from application automation to true DevOps by including the database
Moving from application automation to true DevOps by including the databaseRed Gate Software
 

What's hot (11)

Enterprise-Scale WordPress
Enterprise-Scale WordPressEnterprise-Scale WordPress
Enterprise-Scale WordPress
 
Spring Batch Introduction (and Bitbucket Project)
Spring Batch Introduction (and Bitbucket Project)Spring Batch Introduction (and Bitbucket Project)
Spring Batch Introduction (and Bitbucket Project)
 
Flux and React.js
Flux and React.jsFlux and React.js
Flux and React.js
 
Introduce flux & react in practice
Introduce flux & react in practiceIntroduce flux & react in practice
Introduce flux & react in practice
 
Reactive Web Development with Spring Boot 2
Reactive Web Development with Spring Boot 2Reactive Web Development with Spring Boot 2
Reactive Web Development with Spring Boot 2
 
Breaking data
Breaking dataBreaking data
Breaking data
 
Database Source Control: Migrations vs State
Database Source Control: Migrations vs StateDatabase Source Control: Migrations vs State
Database Source Control: Migrations vs State
 
GraphQL vs. (the) REST
GraphQL vs. (the) RESTGraphQL vs. (the) REST
GraphQL vs. (the) REST
 
Sitecore Data Exchange Framework
Sitecore Data Exchange FrameworkSitecore Data Exchange Framework
Sitecore Data Exchange Framework
 
DDD Domain Relationships Radars
DDD Domain Relationships RadarsDDD Domain Relationships Radars
DDD Domain Relationships Radars
 
Moving from application automation to true DevOps by including the database
Moving from application automation to true DevOps by including the databaseMoving from application automation to true DevOps by including the database
Moving from application automation to true DevOps by including the database
 

Similar to Schema migration (DB migration) with Phinx

PHP North-East - Automated Deployment
PHP North-East - Automated DeploymentPHP North-East - Automated Deployment
PHP North-East - Automated DeploymentMichael Peacock
 
Automated Deployment
Automated DeploymentAutomated Deployment
Automated Deploymentphpne
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database DeploymentsMike Willbanks
 
Delivering changes for applications and databases
Delivering changes for applications and databasesDelivering changes for applications and databases
Delivering changes for applications and databasesEduardo Piairo
 
Building and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache AirflowBuilding and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache AirflowKaxil Naik
 
Datasheet scriptspluginforrd
Datasheet scriptspluginforrdDatasheet scriptspluginforrd
Datasheet scriptspluginforrdMidVision
 
Datasheet was pluginforrd
Datasheet was pluginforrdDatasheet was pluginforrd
Datasheet was pluginforrdMidVision
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPagesUlrich Krause
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the BasicsUlrich Krause
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life DevOps.com
 
Dynamics of Leading Legacy Databases
Dynamics of Leading Legacy DatabasesDynamics of Leading Legacy Databases
Dynamics of Leading Legacy DatabasesCognizant
 
Datasheet foldermanagementpluginforrd
Datasheet foldermanagementpluginforrdDatasheet foldermanagementpluginforrd
Datasheet foldermanagementpluginforrdMidVision
 
APACHE
APACHEAPACHE
APACHEARJUN
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialThomas Daly
 
Db2 migration -_tips,_tricks,_and_pitfalls
Db2 migration -_tips,_tricks,_and_pitfallsDb2 migration -_tips,_tricks,_and_pitfalls
Db2 migration -_tips,_tricks,_and_pitfallssam2sung2
 
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & Migration
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & MigrationBW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & Migration
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & MigrationLinh Nguyen
 
FlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootFlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootInexture Solutions
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the BasicsUlrich Krause
 

Similar to Schema migration (DB migration) with Phinx (20)

PHP North-East - Automated Deployment
PHP North-East - Automated DeploymentPHP North-East - Automated Deployment
PHP North-East - Automated Deployment
 
Automated Deployment
Automated DeploymentAutomated Deployment
Automated Deployment
 
Handling Database Deployments
Handling Database DeploymentsHandling Database Deployments
Handling Database Deployments
 
Delivering changes for applications and databases
Delivering changes for applications and databasesDelivering changes for applications and databases
Delivering changes for applications and databases
 
Building and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache AirflowBuilding and deploying LLM applications with Apache Airflow
Building and deploying LLM applications with Apache Airflow
 
Datasheet scriptspluginforrd
Datasheet scriptspluginforrdDatasheet scriptspluginforrd
Datasheet scriptspluginforrd
 
resume
resumeresume
resume
 
My Saminar On Php
My Saminar On PhpMy Saminar On Php
My Saminar On Php
 
Datasheet was pluginforrd
Datasheet was pluginforrdDatasheet was pluginforrd
Datasheet was pluginforrd
 
Extension Library - Viagra for XPages
Extension Library - Viagra for XPagesExtension Library - Viagra for XPages
Extension Library - Viagra for XPages
 
[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics[DanNotes] XPages - Beyound the Basics
[DanNotes] XPages - Beyound the Basics
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life
 
Dynamics of Leading Legacy Databases
Dynamics of Leading Legacy DatabasesDynamics of Leading Legacy Databases
Dynamics of Leading Legacy Databases
 
Datasheet foldermanagementpluginforrd
Datasheet foldermanagementpluginforrdDatasheet foldermanagementpluginforrd
Datasheet foldermanagementpluginforrd
 
APACHE
APACHEAPACHE
APACHE
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
 
Db2 migration -_tips,_tricks,_and_pitfalls
Db2 migration -_tips,_tricks,_and_pitfallsDb2 migration -_tips,_tricks,_and_pitfalls
Db2 migration -_tips,_tricks,_and_pitfalls
 
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & Migration
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & MigrationBW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & Migration
BW Migration to HANA Part 2 - SUM DMO Tool for SAP Upgrade & Migration
 
FlywayDB Migration with Spring Boot
FlywayDB Migration with Spring BootFlywayDB Migration with Spring Boot
FlywayDB Migration with Spring Boot
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 

Recently uploaded

Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 

Schema migration (DB migration) with Phinx

  • 1. Schema Migration (DB migration) with Phinx Hadi Ariawan @hadiariawan github.com/hadiariawan
  • 2. What is Schema migration? In software engineering, schema migration (also database migration, database change management) refers to the management of incremental, reversible changes to relational database schemas. A schema migration is performed on a database whenever it is necessary to update or revert that database's schema to some newer or older version.
  • 3. Have you ever face these situations? ● Developer A add several columns on table X, developer A commits and push the codes. Developer B pulls the code and then the app breaks. ● Developer finishes the codes and forgot to give/email the sql alter script to DevOps/Sysadmin guy. When DevOps deploy to production the app breaks. ● DevOps guy deploying more than 1 DB instances. Can you imagine how long it took to apply DB changes if the instances are (for example) 10? ● …..
  • 4. Why using Schema migration? “The rule is simple. You should never tie database migrations to application deploys or vice versa. By minimising dependencies you enable faster, easier and cleaner deployments.” http://www.brunton-spall.co.uk/post/2014/05/06/database-migrations-done-right/
  • 5. Benefits of using Schema Migration ● Separated application and database deployment. ● Ensured same DB structure through all the team member. ● Database versioning (keep track of DB structure changes). ● Easier to maintain incremental database changes.
  • 6. Why Phinx? https://phinx.org/ ● Be portable amongst the most popular database vendors. ● Be PHP framework independent. ● Have a simple install process. ● Have an easy to use command-line operation. ● Integrate with various other PHP tools (Phing, PHPUnit) and web frameworks.
  • 7. Why i choose phinx ● Familiar. Because it is written in PHP. ● Command line app. Easy to connect phinx to deployer tool. ● Supports most popular databases (MySQL, PostgreSQL, etc). ● Works independently/standalone. Multi platform and frameworks. ● Helpful for unit testing. ● Their documentation is easy to follow, easy to understand.
  • 8. Installation Installation is easy. Use composer! php composer.phar require robmorgan/phinx execute this after installation finished. vendor/bin/phinx init http://docs.phinx.org/en/latest/install.html
  • 9. One thing Before Migrating There should be a file named phinx.yml after you are done initialized your project. Phinx.yml file contains your environments and database configurations.
  • 10. Create a migration file $ php vendor/bin/phinx create BrandTable
  • 12. Data types? Indexes? Foreign keys? Check their documentation on this matters. https://book.cakephp.org/3.0/en/phinx/migrations.html#working-with-columns They are pretty straightforward and easy to follow.
  • 13. Seeder ● Populate reference data ○ Rarely change data ○ Eg: Country data, User type data, etc ● Populate test data ○ Would you run sql command on PhpMyAdmin 100, 1000, 10000 times?
  • 14. How to create and run a seeder Create a seeder $ phinx seed:create MyNewSeeder Run a seeder $ phinx seed:run -e development -s MyNewSeeder
  • 15. Seeder Example Here is an example of seeder. A seeder for super user account. This one records will be inserted in users table.
  • 16. How to generate random data in your seeder? Use Faker! (https://github.com/fzaninotto/Faker)
  • 17. How to access DB in your seeder? Often times you encounter cases that need current data in database in order to generate other data. This is how you it on phinx. Use these 2 methods ● fetchRow() ○ For single row ● fetchAll() ○ For multiple rows https://book.cakephp.org/3.0/en/phinx/migrations.html#fetching-rows
  • 18. Tips on using Phinx ● Read the documentation thoroughly. ● Write migration wisely. Only some method can be reversed. ● Store it in version control (git) and share it with your team/colleague. Phinx joined CakePHP family on June 2017 https://bakery.cakephp.org/2017/06/23/welcoming-phinx-to-the-cakephp-family.html
  • 19. That’s All! Now you know how, what and why you should use schema migration, right? “Get your database under control” Hadi Ariawan @hadiariawan github.com/hadiariawan