SCHEMA BUILDER( การจัดการตาราง )
Schema Builder คือ ฟังก์ชันที่ Laravel ใช้จัดการตาราง
ไม่ว่าจะเป็นลบอ่านเขียน กำหนดค่าของตารางครับ
เพื่อนๆหลายท่านคงเคยใช้ cms หลายๆตัว ที่ตอนเริ่มแรกเขาให้เราตั้งค่า ฐานข้อมูล ตอนสุดท้ายก็จะโหลดนานหน่อย
แต่การโหลดตอนสุดท้ายนี้แหละครับ คือการสร้างฐานข้อมูลขึ้นมา ถ้าอ่านบทความนี้จบแล้วเพื่อนก็สามารถนำฟังก์ชันเหล่านี้ไปสร้างตัวติดตั้งส่วนตัวใช้ได้เลย
เพื่อนๆหลายท่านคงเคยใช้ cms หลายๆตัว ที่ตอนเริ่มแรกเขาให้เราตั้งค่า ฐานข้อมูล ตอนสุดท้ายก็จะโหลดนานหน่อย
แต่การโหลดตอนสุดท้ายนี้แหละครับ คือการสร้างฐานข้อมูลขึ้นมา ถ้าอ่านบทความนี้จบแล้วเพื่อนก็สามารถนำฟังก์ชันเหล่านี้ไปสร้างตัวติดตั้งส่วนตัวใช้ได้เลย
ตัวอย่างการสร้างตารางครับ:
Schema::create('users', function($table)
{
$table->increments('id');
});
ในตัวอย่างเราสร้างตาราง user โดยกำหนดให้คอลัมน์ id เป็น auto increments
ตัวอย่างการลบ:
Schema::drop('users');
ลบแบบ remote ไปที่อื่น:
Schema::drop('users', 'connection_name');
ตัวอย่างการเชื่อมต่อฐานข้อมูลอื่นๆที่ไม่ได้อยู่บนเครื่องเราครับ.
Schema::create('users', function($table)
{
$table->on('connection');
});
ตัวอย่างการเพิ่มคอลัมน์ โดยไม่ต้องห่วงเรื่องชนิดของฐานข้อมูลเลยครับ
J
คำสั่ง
|
คำอธิบาย
|
$table->increments('id');
|
ตั้ง auto increment ให้ id
|
$table->string('email');
|
ให้คอลัม email เป็น varchar
|
$table->string('name', 100);
|
ให้คอลัม name เป็น varchar มีความยาว 100
|
$table->integer('votes');
|
ให้คอลัม votes เป็น integer
|
$table->float('amount');
|
ให้คอลัม amount เป็น float
|
$table->decimal('amount', 5, 2);
|
ให้คอลัม amount เป็น decimal ที่มีค่าระหว่าง 5 กับ 2
|
$table->boolean('confirmed');
|
ให้คอลัม confirmed เป็น boolean
|
$table->date('created_at');
|
ให้คอลัม created_at เป็น date
|
$table->timestamp('added_on');
|
ให้คอลัม added_on เป็น timestamp
|
$table->timestamps();
|
ให้คอลัมน์ created_at กับ updated_at สร้างข้อมูลอัตโนมัติเวลามีการเพิ่มหรือแก้ไขข้อมูล
|
$table->text('description');
|
ให้คอลัม description เป็น text
|
$table->blob('data');
|
ให้คอลัม data เป็น blob
|
->nullable()
|
ให้คอลัม สามารถเป็นค่าว่างได้
|
->default($value)
|
กำหนดค่าเริ่มต้นให้คอลัมน์
|
->unsigned()
|
กำหนดให้ interger กลายเป็น unsign
|
Note: Laravel's "boolean" เวลาสร้างคอลัมน์จะมีชนิดเป็น tiny int
ตัวอย่างการใช้งานจริง
Schema::table('users', function($table)
{
$table->create();
$table->increments('id');
$table->string('username');
$table->string('email');
$table->string('phone')->nullable();
$table->text('about');
$table->timestamps();
});
ตัวอย่างหารลบคอลัน์:
$table->drop_column('name');
ตัวอย่างการลบหลายๆคอลัมน์:
$table->drop_column(array('name', 'email'));
Schema builder สนับสนุนการสร้าง index หลายๆชนิดครับ แต่ละ index ก็คือ method ของ schema:
ตัวอย่างการสร้าง index กำหนดให้เป็น unique
ให้คอลัมน์ email :
$table->string('email')->unique();// การเพิ่ม index ลงในแถวเดียวเลย
ข้างล่างเป็นการสร้าง index ในแบบแยกแถวครับ
คำสั่ง
|
คำอธิบาย
|
$table->primary('id');
|
เพิ่มคีย์หลัก
|
$table->primary(array('fname', 'lname'));
|
เพิ่ม primary key แบบ หลายๆตัว
|
$table->unique('email');
|
ให้คอลัมน์ emailไม่มีการซ้ำ
|
$table->fulltext('description');
|
ให้คอลัมน์ description
มี index เป็น fulltext
|
$table->index('state');
|
การสร้าง index แบบเบสิค
|
การลบ index เราต้องกำหนด ตาราง คอลัมน์ ชนิด
ของ index เข้าไปด้วยเหมือนในตัวอย่างครับ:
$table->drop_primary('users_id_primary');
|
|
$table->drop_unique('users_email_unique');
|
|
$table->drop_fulltext('profile_description_fulltext');
|
|
$table->drop_index('geo_state_index');
|
ตัวอย่างการสร้างคีย์เชื่อม:
$table->foreign('user_id')->references('id')->on('users');
จะกำหนดการตอบโต้เวลาโดนแก้ไขหรือลบได้ด้วย
ครบครันเลยครับ:
$table->foreign('user_id')->references('id')->on('users')->on_delete('restrict');
$table->foreign('user_id')->references('id')->on('users')->on_update('cascade');
ตัวอย่างข้างล่างเป็นการลบคีย์เชื่อมของตาราง
posts :
$table->drop_foreign('posts_user_id_foreign');
Note: คอลัมน์ที่เป็นคีย์เชื่อม laravel จะทำการ auto increments ให้ในกรณีที่คอลัมน์มีชนิดเป็น unsigned โดยใช้ฟังก์ชัน unsigned() โดยเราต้องสร้างคอลัมน์ที่เป็นคีย์เชื่อมนี้ก่อนการเชื่อม และฐานข้อมูลต้องมีชนิดเป็น InnoDB
$table->engine = 'InnoDB';
$table->integer('user_id')->unsigned();
บทหน้าจะมาต่อในเรื่อง Cookies กับ Session ครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น