Sử dụng phinx để thực hiện migration trong PHP
PHP
78
migration
1
phinx
1
White

Đặng Thành Nam viết ngày 20/07/2015

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, downchange. 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, countrypopulation 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.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Đặng Thành Nam

6 bài viết.
14 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
10 4
(Ảnh) Laravel vừa thông báo nâng cấp bản v5.1, lần đầu tiên trong lịch sử cung cấp chính sách hỗ trợ dài hạn (longtime support) với người dùng. Ch...
Đặng Thành Nam viết 3 năm trước
10 4
White
7 3
Associative array là object sẽ gặp rất nhiều trong quá trình làm PHP. Ở bài này mình sẽ tổng hợp các cách nối associative array phổ biến và sự khá...
Đặng Thành Nam viết 3 năm trước
7 3
White
6 0
Giới thiệu Laravel và Lumen (Link) là một framework hiện đại của PHP, mang rất nhiều những ưu điểm các các framework hiện đại từ các ngôn ngữ khác...
Đặng Thành Nam viết hơn 3 năm trước
6 0
Bài viết liên quan
White
2 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 1 năm trước
2 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
6 bài viết.
14 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!