Schema Builder ( คลาสเกี่ยวกับการสร้างตาราง )

คลาส Schemaใช้ในการจัดการตาราง มักใช้ร่วมกับคำสั่ง migration

<a name="creating-and-dropping-tables"></a> ## สร้างและลบตาราง

สร้างตารางใหม่ด้วยเมทอด Schema::create ตามตัวอย่างเลยครับ

1 Schema::create('users', function($table)
2 {
3 	$table->increments('id');
4 });

เมทอดตัวแรกคือชื่อตาราง พารามิเตอร์ที่สองคือ Closure ที่จะรับออปเจคของคลาส Blueprint ในการสร้างตาราง

จะเปลี่ยนชื่อตารางใช้เมทอดrename

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

ในการเลือกการเชื่อมต่อกรณีเรามีหลายฐานข้อมูลใช้เมทอด Schema::connection

1 Schema::connection('foo')->create('users', function($table)
2 {
3 	$table->increments('id'):
4 });

จะลบตารางใช้เมทอด Schema::drop

1 Schema::drop('users');
2 
3 Schema::dropIfExists('users');

<br /><br /><br /><br /><br /><br /> <a name="adding-columns"></a> ## เพิ่มคอลัมน์

ในการแก้ไขตารางเราใช้คำสั่ง Schema::table

1 Schema::table('users', function($table)
2 {
3 	$table->string('email');
4 });

ตารางคำสั่งต่างของคลาส Blueprint ครับ

คำสั่ง | คำอธิบาย ————- | ————- $table->increments('id'); | ใช้ทำ auto_increment ให้ (primary key). $table->string('email'); | ค่าที่ออกมาจะเป็น VARCHAR ความยาว 255 $table->string('name', 100); | ค่าที่ออกมาจะเป็น VARCHAR ความยาว 100 $table->integer('votes'); | ค่าที่ออกมาจะเป็น interger $table->bigInteger('votes'); | ค่าที่ออกมาจะเป็น bigint $table->smallInteger('votes'); | ค่าที่ออกมาจะเป็นSMALLINT $table->float('amount'); | ค่าที่ออกมาจะเป็น FLOAT $table->decimal('amount', 5, 2); | ค่าที่ออกมาจะเป็น decimal ที่มีค่าระหว่าง 5,2 $table->boolean('confirmed'); | ค่าที่ออกมาจะเป็น BOOLEAN $table->date('created_at'); | ค่าที่ออกมาจะเป็น DATE $table->dateTime('created_at'); | ค่าที่ออกมาจะเป็นDATETIME $table->time('sunrise'); | ค่าที่ออกมาจะเป็น TIME $table->timestamp('added_on'); | ค่าที่ออกมาจะเป็น TIMESTAMP

<br /><br />

คำสั่ง | คำอธิบาย ————- | ————- $table->timestamps(); | เพิ่มคอลัมน์ created_at และ updated_at columns $table->softDeletes(); | เพิ่มคอลัมน์ deleted_at $table->text('description'); | ค่าที่ออกมาจะเป็น TEXT $table->binary('data'); | ค่าที่ออกมาจะเป็น BLOB $table->enum('choices', array('foo', 'bar')); | ค่าที่ออกมาจะเป็น ENUM ->nullable() | อนุญาตให้เป็นค่าว่างได้ ->default($value) | สร้างค่าเริ่มต้น ->unsigned() | เลี่ยน INTEGER เป็น UNSIGNED

ถ้าเราใช้ MySQL สามารถใช้เมทอด after ทำการเรียงลำดับคอลัมน์

ตัวอย่าง

1 $table->string('name')->after('email');

<a name="renaming-columns"></a> ## เปลี่ยนชื่อ Columns

ใช้เมทอด renameColumn ครับ

ตัวอย่าง

1 Schema::table('users', function($table)
2 {
3 	$table->renameColumn('from', 'to');
4 });

หมายเหตุ: คอลัมน์ชนิด enum ไม่สนับสนุน

<br /> <a name="dropping-columns"></a> ## ลบ Columns

ตัวอย่าง

1 Schema::table('users', function($table)
2 {
3 	$table->dropColumn('votes');
4 });

ลบหลายๆ คอลัมน์

1 Schema::table('users', function($table)
2 {
3 	$table->dropColumn('votes', 'avatar', 'location');
4 });

<a name="checking-existence"></a> ## ตรวจว่าตารางมีอยู่ไหม

ตรวจว่าตารางมีอยู่ไหม

1 if (Schema::hasTable('users'))
2 {
3 	//
4 }

ตรวจว่าคอลัมน์มีอยู่ไหม

1 if (Schema::hasColumn('users', 'email'))
2 {
3 	//
4 }

<br /><br /><br /><br /> <a name="adding-indexes"></a> ## เพิ่ม Indexes

สร้างทั้ง Column และ Index

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

คำสั่ง | คำอธิบาย ————- | ————- $table->primary('id'); | เพิ่ม primary key $table->primary(array('first', 'last')); | เพิ่ม composite keys $table->unique('email'); | เพิ่ม unique index $table->index('state'); | เพิ่ม basic index

<a name="foreign-keys"></a> ## Foreign Keys คีย์เชื่อม

ตัวอย่างการเพิ่มคีย์เชื่อม

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

ในตัวอย่างเราทำการให้คอลัมน์ user_idอ้างอิงกับคอลัมน์ id บนตารางusers

เราสามารถเสริมคำสั่ง “on delete” และ “on update” เข้าไปเหมือนตัวอย่าง

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

ในการลบใช้เมทอด dropForeign ตัวอย่าง

1 $table->dropForeign('posts_user_id_foreign');

หมายเหตุ: ให้ชนิดของคอลัมน์ที่เป็นคีย์เชื่อมให้เป็น unsigned ทุกครั้งกรณีที่เชื่อมไปยัง คอลัมน์ที่เป็น interger และเป็น auto_increment ครับ

<br /><br />

<a name="dropping-indexes"></a> ## ลบ Indexes

ในการลบคีย์เชื่อม larave ตั้งค่าคีย์เป็นค่าเริ่มต้นให้เเล้วนะครับ โดยอ้างอิงจากชนิดกับชื่อของตารง

คำสั่ง | คำอธิบาย ————- | ————- $table->dropPrimary('users_id_primary'); | ลบคีย์หลักจากตาราง users $table->dropUnique('users_email_unique'); | ลบคีย์เดี่ยวจากตาราง users $table->dropIndex('geo_state_index'); | ลบคีย์ทั่วไปจาก ตาราง geo <a name="storage-engines"></a> ##ชนิดของตาราง

การเซตชนิดของตารางเราใช้เมทอด engine ตามตัวอย่างครับ

1 Schema::create('users', function($table)
2 {
3     $table->engine = 'InnoDB';
4 
5     $table->string('email');
6 });