Làm thứ làm cho Laravel Request của bạn thú vị hơn

PHP Laravel Database Migration cơ bản

Hi các bạn, nay ta tiếp qua bài PHP Laravel Database Migration nhé

Laravel có hỗ trợ chúng ta tạo database thông qua Database Migration

Laravel cung cấp cho các bạn đầy đủ các dữ liệu lưu trữ => SQL => Import lên Database luôn, cực kỳ tiện lợi phải ko nào

Thích hợp cho các website ko có sẵn cơ sở dữ liệu đã dựng trước, khi người dùng sử dụng chỉ cần sửa kết nối MySQL ở file .env và chạy composer migrate => toàn bộ table sẽ được tạo ra và có thể sử dụng

Về cơ bản thì PHP Laravel Database Migration khá là dễ, mình xin vào chi tiết luôn nhé 😀

Mục lục – PHP Laravel Database Migration:

  1. Tạo Migration – Table
  2. Các thông số dữ liệu để set cho column
  3. Thực hiện Migrate
  4. Database Seeding

1/ Tạo Migration – Table

Cái này thì chúng ta chỉ chạy qua composer thôi với dòng lệnh như sau:

php artisan make:migration <tên_muốn_dặt> --create=<tên_table>

// ví dụ
php artisan make:migration creatAdmin --create=Admin

Như ví dụ của mình thì 1 file *createAdmin.php sẽ được tạo ra ở database/migrations

*: là đằng trước còn có thông số ngày tháng năm,…

Khi tạo migration ghi như trên của mình, Composer sẽ tạo sẵn cho ta 1 cái Class luôn, ta chỉ việc vào code thôi:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateAdmin extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('Admin', function(Blueprint $table)
		{
			$table->increments('id');
			$table->timestamps();
		});
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('Admin');
	}

}

Đó là cơ bản của file, như các bạn đã thấy ở $table, ta sẽ định nghĩa các column mà chúng ta cần dùng vào đó

Đó là cơ bản thôi :D, bạn đã tạo xong thành công 1 migration Laravel.

2/ Các thông số dữ liệu để set cho column

Laravel định nghĩa các thông số này qua method hết, bắt buộc chúng ta fải xem và nhớ thôi 😀

Thật ra phần này cũng 1 phần của Schema Builder mà thôi, mình gộp lại luôn cho nó dễ, thằng này cơ bản cũng ko có gì khó 😀

Các bạn nên nhớ các sử dụng các method này như nhau vd: $tables->increment(<tên_column>)

Mình sẽ kể ra 1 số các dữ liệu đa số hay sử dụng:

Laravel MethodTương đồng SQLMô tả
$table->increment('id')INT(10) Auto-Increment - Khóa chínhCột id tăng dần ở dạng int bình thường
$table->integer('age')INT(11)Số nguyên
$table->string('email')VARCHAR(255)Chữ ở dạng VARCHAR giới hạn 255 kí tự
$table->string('name' , 40)VARCHAR(40)Chữ ở dạng VARCHAR giới hạn 40 kí tự do người dùng set
$table->text('gioithieu')TEXTChữ ở dạng TEXT trong SQL
$table->longText('comment')LONGTEXTChữ ở dạng long Text - hỗ trợ nhiều kí tự hơn Text
$table->float('money')FLOATSố thực dạng FLOAT
$table->double('price', 5, 2)DOUBLESố thực dạng DOUBLE với độ dài 5, và sau chấm là 2
$table->date('save_at')DATENgày ở dạng DATE SQL
$table->dateTime('create_at')DATETIMENgày ở dạng DATETIME SQL

Ngoài ra chúng ta còn thêm 3 method nữa để set cho column:

  • $table->(method column)->default($value) => Set giá trị mặc định cho column
  • $table->(int method column)->unsigned() => Set giá trị không fải số âm cho column số nguyên
  • $table->(method column)->nullable() => Set column này có thể null(để trống ko cần nhập)

Ví dụ mình cần tạo ra 1 table như sau:

Table monHang:

  • mh_id – INT – AI
  • mh_name – VARCHAR
  • mh_picture – VARCHAR
  • mh_description – TEXT
  • mh_price – DOUBLE
  • mh_category – INT
  • mh_created – DATETIME

Thì đoạn code mình sẽ như sau:

Schema::create('monHang', function(Blueprint $table)
		{
			$table->increments('mh_id');
			$table->string('mh_name');
			$table->string('mh_picture');
			$table->text('mh_description');
			$table->double('mh_price', 8, 3'); // Chỉ có 3 số sau .
			$table->integer('mh_category');
			$table->dateTime('mh_created');
		});

Như vậy mình đã tạo ra Table monHang đơn giản để chứa các thông tin về món hàng của web.

3/ Thực hiện Migrate Database

Khi đã tạo ra các migration và set column cho mình hết rồi, các bạn có thể migrate với câu lệnh đơn giản với composer:

php artisan migrate

Khi này composer sẽ làm việc và tạo table lên cho bạn, bạn chỉ cần đợi thông báo từ Composer thôi 😀

4/ Database Seeding

Với một số table, ta cũng cần 1 có dữ liệu nhất định cụ thể khi đã tạo ra table, nếu ta migrate xong fải vào phpMyAdmin để thêm thì đôi khi cũng bất tiện quá

Thế nên Laravel còn thêm 1 tính năng nữa là Database Seeding, giúp các bạn có thể tạo ra một số rows mặc định để sử dụng

Với tính năng này thì mình ưu tiên cách đơn giản như sau:

  • Vào thư mục: database/seeds
  • Xác định table mà bạn cần seed, ví dụ mình sẽ thêm vào table users
  • Tạo file users.php trong thư mục seeds

Lưu ý: Laravel sẽ tự động hiểu tên file là tên table. Nhưng vẫn có cách để các bạn set tên table ở trong code

Vậy thôi, chúng ta bắt đầu code để seed nhé 😀

	$now = date('Y-m-d H:i:s'); // lay thoi gian hien tai

	return [
		'table' => 'users' // set Table can seed

		[
			'email'		=>	'[email protected]',
			'name'		=>	'Seth Phat',
			'pass'		=>	Hash::make('123456'),
			'created'	=>	$now	
		]
	];

Như các bạn đã thấy mình set Table như trên, nhưng làm dư ấy, chỉ cần đặt tên file đúng theo tên Table là cũng dc rồi 😀

Bây giờ chúng ta sẽ bắt đầu chạy lệnh seed bằng composer:

php artisan db:seed

Xong, các bạn có thể vào phpMyAdmin để kiểm tra 😀

Bài học về PHP Laravel Database Migration tới đây là kết thúc!

Bài tiếp theo: PHP Laravel Redirect

Các bài Laravel cũ: http://sethphat.com/sp-tag/laravel

Cám ơn các bạn đã quan tâm theo dõi :D!

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

Bình luận qua Facebook