/ / Laravel Framework / Comment (0)

Laravel Framework: sử dụng Migrations và Schema Builder

Thông thường khi chúng ta muốn tạo ra 1 cơ sở dữ liệu và các bảng dữ liệu chúng ta hay vào trong PhpMyadmin để thực hiện thủ công phải không nào.Nhưng đối với cách làm này thì nhiều lúc sẽ làm cho chúng ta mất khá nhiều thời gian trong việc tạo cũng như chỉnh sửa dữ liệu.Laravel cung cấp cho chúng ta 1 giải pháp rất tuyệt vời đó chính Migrations và Schema Builder.Từ khi làm việc với Laravel mình đã chuyển sang sử dụng cặp đôi Migrations và Schema Builder để thực hiện thiết kế và quản lý cơ sở dữ liệu (csdl).

– Đầu tiên các bạn cần cấu hình các thông số kết nối cơ sở dữ liệu trong file /app/config/database.php,tên csdl của mình là laravel_demo

	'mysql' => array(
		'driver'    => 'mysql',
		'host'      => 'localhost',
		'database'  => 'laravel_demo',
		'username'  => 'forge',
		'password'  => '',
		'charset'   => 'utf8',
		'collation' => 'utf8_unicode_ci',
		'prefix'    => '',
	),

Và bây giờ chúng ta cùng nhau tìm hiểu nhé.

Sử dụng Migrations và Schema Builder trong Laravel Framework

A.Lớp Schema Builder – thao tác với bảng CSDL

– Lớp Schema trong Laravel cung cấp cơ chế thao tác với bảng CSDL. Nó làm việc với tất cả CSDL mà Laravel hổ trợ, và thông qua những hàm API của hệ thống.
1.Phương thức create – Tạo bảng dữ liệu

Schema::create('users', function($table){
	$table->increments('id');
	$table->string('email')->unique();
	$table->string('password', 50);
	$table->rememberToken();
	$table->string('name');
	$table->string('phone', 15);
	$table->timestamps();
});

– Như các bạn thấy đối số đầu tiên trong phương thức create chính là tên bảng dữ liệu mà ta muốn tạo.Trong đối số thứ 2 chính là nơi ta thực hiện khai báo các cột dữ liệu trong bảng này.
– Mình xin giải thích 1 chút về các lệnh hay sử dụng ở trên:
+ increments: tạo khóa chính của bảng dữ liệu,và khóa này tự tăng
+ string: tạo cột dạng chuỗi (giống kiểu varchar)
+ rememberToken: Tạo 1 columns tên là remember_token trong table users, nó sẽ dùng được lưu token khi người dụng đăng nhập sử dụng ghi nhớ lần sau – dạng VARCHAR(100) NULL)
+ timestamps: Lệnh này sẽ tạo 2 columns là created_atupdated_at trong table users, nó là 2 trường mặc định để lưu thời gian tạo và sửa của model. Nếu bạn không tạo 2 trường này, mặc định khi insert 1 bản ghi LARAVEL 4 sẽ báo lỗi. Nếu bạn vẫn không muốn sử dụng 2 cột này, thì bạn vào model của bảng này và thêm vào: public $timestamps = false; nó sẽ không mặc định thêm 2 dữ liệu này vào bản ghi nữa.
Ngoài ra còn rất nhiều lệnh khác được sử dụng khi tạo bảng dữ liệu,các bạn có thể vào đây để xem thêm nhé.
2.Phương thức rename – Đổi tên bảng dữ liệu
Cú pháp:

Schema::rename($from, $to);

Ví dụ: đổi tên bảng từ users sang user ta sử dụng

Schema::rename('users', 'user');

3.Phương thức drop – Xóa bảng dữ liệu

Schema::drop('users');
Schema::dropIfExists('users');

4.Phương thức table – cập nhật thêm cột và một bảng tồn tại

Schema::table('users', function($table)
{
    $table->string('address');
});

Với ví dụ trên ta đang thực hiện thêm 1 cột address vào bảng users
5.Phương thức renameColumn – Đổi tên cột
Đổi tên cột address thành address1

Schema::table('users', function($table)
{
$table->renameColumn('address', 'address1');
});

6.Phương thức dropColumn- Xóa cột

Schema::table('users', function($table)
{
    $table->dropColumn('address');
});

Hoặc các bạn cũng có thể xóa nhiều cột dữ liệu,mỗi cột cách nhau bằng dấu “,”

Schema::table('users', function($table)
{
    $table->dropColumn('address','phone','email');
});

7.Phương thức hasTable – Kiểm tra có tồn tại bảng không

if (Schema::hasTable('users'))
{
    //
}

8.Phương thức hasColumn- Kiểm tra có tồn tại cột không

if (Schema::hasColumn('users', 'email'))
{
    //
}

Với đối số thứ nhất là tên bảng,đối số thứ 2 là tên cột muốn kiếm tra.
9.Thêm chỉ mục vào

$table->string('email')->unique();

9.Sử dụng khóa ngoại

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');

– Bạn cũng có thể cho “onDelete” và “onUpdate” trên ràng buộc của bạn

$table->foreign('user_id')
      ->references('id')->on('users')
      ->onDelete('cascade');

– Đề xóa khóa ngoại, bạn sử dụng phương thức dropForeign

$table->dropForeign('posts_user_id_foreign');

– Ngoài ra lớp còn hỗ trợ cho chúng ta rất nhiều các phương thức để làm việc với CSDL,các bạn có thể vào đây để xem thêm về cách sử dụng các phương thức này nhé.

B.Migrations – Quản lý CSDL

– Migrations là một kiểu điều khiển database, nó cho phép một nhóm có thể làm việc với CSDL một cách hiệu quả hơn. Migrations đi kèm với Schema Builder để thiết kế hệ thống của bạn một cách dễ dàng.
1.Dùng artisan tạo migration
– Để tạo migration chúng ta sẽ thao tác trên màn hình cmd.
Ví dụ:

php artisan migrate:make create_users_table

Sau khi chạy dòng lệnh trên hệ thống sẽ tự động tạo cho ta 1 file bên trong /app/database/migrations theo định dạng: yyyy_mm_dd_hhmmss_create_users_table.php
– Và nội dung trong file này sẽ như sau:

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{

	}
	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		//
	}
}

– Mặc định nó sẽ tạo cho chúng ta 1 lớp được kế thừa từ lớp Migration,và nó có 2 phương thức là up()down(), function up dùng để thực thi migrate và down dùng để đảo ngược migrate.Hai quá trình này phải hoàn toàn ngược nhau. Ví dụ ở up() bạn create table users thì ở down() bạn drop table users, không làm gì hơn cả.
– Giờ sẽ tới bước chúng ta thực hiện tạo bảng dữ liệu users bên trong phương thức up() bằng các phương thức bên trong lớp Schema được hướng dẫn như phần:

public function up()
{
	Schema::create('users', function($table){
		$table->increments('id');
		$table->string('email')->unique();
		$table->string('password', 50);
		$table->rememberToken();
		$table->string('name');
		$table->string('phone', 15);
		$table->timestamps();
	});
}

– Tiếp tục, ở down() bạn chỉ thêm lệnh xóa bảng đó đi:

public function down()
{
	Schema::drop('users');
}

– Như vậy Việc thiết kế đã xong, bây giờ chúng ta sẽ sử dụng migrations để thực thi tập tin này bằng lệnh:

php artisan migrate

 

migrate

migrate

– Bây giờ trong CSDL đã có table users với cái trường mình mong muốn. Bạn có thể tạo nhiều table cùng 1 lúc chứ không cần làm từng table 1.Đồng thời hệ thống sẽ tự động tạo thêm 1 bảng migrations nữa.

Bảng users

Bảng users

2. Chỉnh sửa migrations
Ở đây chúng ta có thêm ví dụ đó là việc thêm 1 cột dữ liệu hoặc chỉnh sửa 1 cột dữ liệu nào đó thì chúng ta có 2 cách
+ Cách 1: các bạn tạo thêm 1 migrations mới,và sử dụng như ở trên,với cách này thì sẽ tạo ra khá nhiều file trong migrations khi chỉnh sửa nhiều.
+ Cách 2: Viết trực tiếp các chỉnh sửa hoặc thêm vào file migrations cũ sau đó chạy lệnh trên cửa sổ cmd:

 php artisan migrate:refresh 

Và nó sẽ hỏi bạn 3 lần: có chạy lệnh này ko? có đồng ý chạy function down() ở các file ko? có đồng ý chạy function up() ở các file ko?.Lệnh này, nó sẽ làm lần lượt chạy function down() ở tất cả các migrate (file nằm trong app/database/migrations), sau đó chạy function up() ở tất cả các file.
Với 2 cách trên mỗi cách có 1 ưu và nhược điểm khác nhau các bạn thấy cách nào phù hợp thì làm nhé.

– Kết thúc bài viết: Qua bài viết này mình đã giới thiệu cho các bạn về khái niệm Migrations và Schema Builder trong Laravel 4.x.Và mình có lời khuyên với những bạn sử dụng Laravel Framewok lên sử dụng cặp đôi này để thực hiện thiết kế cũng như quản lý cơ sở dữ liệu của mình 1 cách tốt nhất.Sang bài tiếp theo mình sẽ giới thiệu cho các bạn về khái niệm Relationships trong Laravel Framework 4.x

 



27/09/2014
Written by nobitacnt

Trong bài viết không tránh khỏi những câu từ chưa chính xác,mong nhận được sự góp ý để website hoàn thiện hơn.Nếu thấy bài viết có ích với bạn hãy like và share để ủng hộ nhé :D.

Bài viết chùng chuyên mục

Gửi bình luận

Giới thiệu

Mình tạo ra blog này với mong muốn chia sẻ và học hỏi kinh nghiệm trong quá trình thiết kế website. Website đang trong quá trình phát triển chân thành cảm ơn mọi sự góp ý của các bạn để làm cho website ngày càng hoàn thiên.

DMCA.com Protection Status
Theo dõi qua Email

Tổng hợp các bài viết về

Hoc php - CodeIgniter Framework - Laravel Framework - PHP va MYSQL