Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Sử dụng phinx để thực hiện migration trong PHP
Migration là gì
Migration là một tính năng được "vay mượn" từ Rails - Ruby framework, rất hữu dụng khi chúng ta thay đổi database (thường là MySQL) và muốn quản lý version của những lần thay đổi đó. Thay đổi có thể là thêm bảng, thêm cột vào bảng hay thay đổi các cột trong cùng một bảng. Nếu các bạn quen dùng Rails thì sẽ hiểu khái niệm này rất nhanh.
Cộng đồng dev của PHP đã "chế" ra một ứng dụng tương tự, làm được các tính năng y hệt như Active Record của Rails, gọi là phinx.
Dĩ nhiên nếu bạn đã dùng các framework lớn của PHP thì migration sẽ được tích hợp như là built-in, có thể kể ra doctrin
của Symfony, bundle
của CakePHP hay devtools
của Phalcon. Tuy nhiên nếu codebase hiện tại không dùng các framework kể trên thì một giải pháp độc lập sẽ hũu ích nhất. Và phinx
chính xác sẽ là thứ bạn cần.
Cài đặt
phinx
có thể cài đặt dễ dàng bằng composer
. Bạn có thể thêm những dòng sau vào composer.json
và chạy composer install
{
"require": {
"robmorgan/phinx": "*"
},
}
Nếu không thì chạy thẳng luôn 2 dòng
composer require robmorgan/phinx
composer install --no-dev
Sử dụng
Sử dụng thì rất đơn giản, trước hết có thể dùng câu lệnh create
để tạo một file migration
phinx create CityMigration
như thế một file với tên YYYYMMDDHHMMSS_city_migration.php
sẽ được tạo ra tự động và có nội dung là
<?php
use Phinx\Migration\AbstractMigration;
class CityMigration extends AbstractMigration
{
/**
* Change Method.
*
* More information on this method is available here:
* http://docs.phinx.org/en/latest/migrations.html#the-change-method
*
* Uncomment this method if you would like to use it.
*
public function change()
{
}
*/
/**
* Migrate Up.
*/
public function up()
{
}
/**
* Migrate Down.
*/
public function down()
{
}
}
File mẫu này có rất nhiều nội dung từ document của phinx, Ở đây có 3 hàm up
, down
và change
. up
dùng để chạy các thay đổi database lần đầu được thực hiện, như là thêm một cột hoàn toàn mới, bảng hoàn toàn mới v.v... down
dùng cho những lúc bạn muốn "undo", "rollback" lại các thay đổi lần trước. Hàm change
thì hơi đặt biệt một chút, bạn viết trình tự cho up
vào hàm change
và phinx sẽ tự hiểu đến lúc down
phải làm thế nào. Khi dùng hàm change
thì phinx sẽ ignore hết các đoạn code viết vào up
hay down
ở trên cùng một file.
Mình giả sử cần tạo một table city
với 3 trường name
, country
và population
thì có thể viết gọn như sau.
use Phinx\Migration\AbstractMigration;
class CityMigration extends AbstractMigration {
public function up() {
$table = $this->table('city');
$table
->addColumn('name', 'string', array('limit' => 20))
->addColumn('country', 'string', array('limit' => 20))
->addColumn('population', 'integer', ['limit'=>5000000])
->save();
}
public function down() {}
}
Ngoài ra phinx còn khá nhiều cách dùng linh hoạt khác, bạn có thể đọc thêm tại document
Kết luận
Migration thực sự là một kĩ thuật làm nhẹ gánh bớt nhức đầu rất nhiều cho lập trình backend bằng PHP. Nếu bạn còn chưa ứng dụng vào dự án của mình thì mình khuyên là rất nên thử, sẽ đến lúc bạn muốn cảm ơn migration rất nhiều.





