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 });