Bài 6 : Migrations trong Laravel 5

Trong bài viết này mình sẽ giới thiệu đến các bạn về migrations trong Laravel 5. Đây là một tính năng rất hay và đóng vai trò quan trọng trong Laravel.

Migrations là gì ?

Bạn có thể hiểu Migrations trong Laravel 5 giống như một version control của database, 1 tính năng giúp bạn quản lý các version của database. Migrations trong Laravel 5 cho phép bạn chỉnh sửa scheme database, cập nhật trang thái hiện tại của database. Migrations giúp cho việc quản lý database của bạn trở nên đễ dàng hơn.

Cấu hình database

Trước tiên để có thể sử dụng được migrations trong Laravel 5, thì bạn phải cấu hình cho Laravel biết được các thông tin cần thiết để kết nối đến database.
Các bạn lưu ý, khi cấu hình kết nối đến database Laravel 5 sẽ cung cấp cho chúng ta 2 file cấu hình như sau:
1. laravel-5/.env (chỉ sử dụng để chạy ở localhost)
2. laravel-5/config/database.php (dùng để chạy khi sản phẩm đã được đưa thành production)
Như các bạn đã biết, chúng ta đang chạy Laravel ở localhost, nên khi kết nối đến database, ta sẽ dùng file thứ 1 .env  để chỉnh cấu hình kết nối đến database mà không cần đụng tới file thứ 2 database.php vì chỉ khi nào đưa sản phẩm Laravel hoàn thiện lên production thì ta mới cần tới nó.
Nhưng ở đây mình cũng sẽ giới thiệu sơ lược về cách cấu hình ở production để các bạn nắm sơ qua để biết khi cần dùng đến sau này.

1. Cấu hình database cho production

Khi mở lên các bạn sẽ thấy file config/database.php có nội dung như sau:
Tại dòng
‘default’ => ‘mysql’,
Đây chính là loại cơ sở dữ liệu mà bạn sẽ dự định kết nối tới, mặc định nó là mysql, ngoài ra bạn có thể chọn sqlite, postgres,…
Sau khi đã chọn cơ sở dữ liệu, bạn phải tiếp tục điền các thông tin cấu hình cần thiết cho loại cơ sở dữ liệu đó. Ví dụ như ở đây mình xài là mysql thì mình sẽ chỉnh lại thông tin cấu hình như sau :
Với
  • ten-host : tên host của bạn
  • ten-database : tên cơ sở dữ liệu của bạn,
  • username-db : username đăng nhập vào db,
  • password-db : password đăng nhập vào db của bạn.

2. Cấu hình ở local

Đây là phần cấu hình mà chúng ta sẽ sử dụng vì hiện tại Laravel 5 đang được setup chạy ở local.
Như đã nói ở trên, để cấu hình DB ở local thì các bạn sử dụng file .env
Mở file này lên và bạn cấu hình như dưới đây
Với
  • ten-host : bạn điền vào tên host, ở đây là localhost
  • ten-database : bạn điền vào tên database mà bạn đã tạo
  • username-db : bạn điền vào username dùng để đăng nhập db, ở đây thường là root (mặc định đối với wamp hoặc xampp)
  • password-db : bạn điền vào password dùng để đăng nhập db, ở đây thường là rỗng (mặc định đối với wamp hoặc xampp)
Sau khi điền đẩy đủ thông tin vào file .env như ở trên là bạn đã cấu hình xong kết nối đến database ở local. Tiếp đến chúng ta sẽ vào chủ để chính đó là sử dụng migrations trong Laravel.

Sử dụng migrations trong laravel 5

Đầy là phần chính trong bài viết ngày hôm nay, nên nó sẽ khá dài vì mình sẽ cố gắng viết thật chi tiết. Các bạn cố gắng theo dõi ha.
Việc đầu tiên khi sử dụng migrations trong Laravel 5 là bạn cần phải kiểm tra xem migrations đã hoạt động tốt trong Laravel hay chưa. Trong window, mở cmd (Ấn phím window, trong box Search programs and files, gõ cmd, rồi enter), rồi di chuyển đến thư mục chứa Laravel 5 của chúng ta
Tiếp đến các bạn gõ lệnh sau
nếu không thấy thông báo lỗi nào hiện ra như hình dưới
cài đặt migration thành công
là các bạn đã cấu hình kết nối đến database thành công, còn không các bạn hãy kiểm tra lại thông tin cấu hình ở trên.
Sau khi chạy lệnh trên, Laravel 5 đồng thời đã thực thi 2 file trong thư mục laravel-5/database/migrations đó là 2014_10_12_000000_create_users_table.php và 2014_10_12_100000_create_password_resets_table.php
cấu trúc thư mục migrations
và tạo ra 2 bảng là user và password_resets trong database . Để kiểm tra bạn có thể vào phpmyadmin, chọn database đã tạo trước đó của bạn (ở đây là laravel5), bạn sẽ thấy 2 bảng là users và password_resets đã được tạo ra. Đây chính là 2 bảng mặc định laravel5 dùng cho mục đích lưu thông tin user và reset lại password khi bạn cần dùng đến sau này.
Đến đây, các bạn cũng đã phần nào mường tượng được tính năng của migrations trong laravel rồi phải không? Nhìn 1 chút sơ qua 2 file trong thư mục migrations, bạn sẽ thấy 2 function là up() và down(). Function up() thường là dùng để tạo bảng, function down() thường có chức năng dùng để rollback lại trang thái ban đầu tại thời điểm mà function up() chưa được thực thi. Chức năng của function down() thường là xóa bảng (drop table).
Nhìn sơ qua 1 tí về function up() trong file 2014_10_12_000000_create_users_table.php
Bạn sẽ thấy rằng đây là function có tác dụng tạo ra bảng users, với
id : thuộc tính tự tăng
name : kiểu string
email : kiểu string, thuộc tính unique
password : kiểu string, độ dài 60
….
Và khi chạy lệnh
hệ thống sẽ thực thi function up() này và tạo ra bảng users trong database. Tương tự ngược lại, với lệnh
hệ thống sẽ thực thi function down()
và xóa bảng users (để kiểm tra các bạn vào phpmyadmin, lúc này database của bạn sẽ không còn bảng users nữa).
OK, nói đến đây thì các bạn cũng đã phần nào hiểu về migrations rồi phải không nào ? Migrations đó là cách mà Laravel giúp ta tương tác với database mà không cần phải đụng vào database, chỉ cần thao tác trên các function dựng sẵn của Laravel. Ngoài ra Migrations giúp ta quản lý các phiên bản (version) của Laravel được dễ dàng hơn.
Nếu vẫn còn khó hiểu và  để hiểu rõ hơn về Migrations, thì chúng ta cùng nhau làm ví dụ để hiểu rõ hơn

Ví dụ về Migrations trong Laravel 5

Giả sử như giờ mình muốn tạo ra bảng mới đặt tên là articles dùng để chưa các bài viết mình sẽ làm như sau:
1. Gõ lệnh
migartions-articles
vào thư mục database/migrations bạn sẽ thấy file 2015_03_01_042501_create_articles_table.php vừa được tạo với nội dung:
2. Gõ tiếp lệnh
để thực thi file vừa tạo ở trên, vào database bạn sẽ thấy bảng articles đã được tạo với 3 column là id, created_at, updated_at.
3. Nếu như bạn muốn thêm 1 vài column mới vào bảng articles thì bạn sẽ làm như thế nào ? Ở đây mình sẽ chỉ cho các bạn cách mình hay dùng, đơn giản là thực thi hàm down() để xóa lại bảng articles vừa tạo bằng lệnh
sau đó, trong function up() edit lại để thêm các cột mới như name, author,…
rồi chạy lại lệnh
để tao lại bảng articles là được. Cách này hơi cùi, vì ở Laravel 5 đã có hỗ trợ bạn thêm cột mới bằng lệnh migrations luôn. Mình sẽ nhắc đến nó trong các bài viết tới.

Comments

Popular Posts