วันอาทิตย์ที่ 19 พฤษภาคม พ.ศ. 2556

Laravel::Schema Builder การจัดการตาราง


SCHEMA BUILDER( การจัดการตาราง )
Schema Builder คือ ฟังก์ชันที่ Laravel ใช้จัดการตาราง ไม่ว่าจะเป็นลบอ่านเขียน กำหนดค่าของตารางครับ
เพื่อนๆหลายท่านคงเคยใช้
cms หลายๆตัว ที่ตอนเริ่มแรกเขาให้เราตั้งค่า ฐานข้อมูล ตอนสุดท้ายก็จะโหลดนานหน่อย
แต่การโหลดตอนสุดท้ายนี้แหละครับ คือการสร้างฐานข้อมูลขึ้นมา ถ้าอ่านบทความนี้จบแล้วเพื่อนก็สามารถนำฟังก์ชันเหล่านี้ไปสร้างตัวติดตั้งส่วนตัวใช้ได้เลย
Creating & Dropping Tables(สร้างและลบตาราง)
ตัวอย่างการสร้างตารางครับ:

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');
});
Adding Columns( เพิ่มคอลัมน์ )
ตัวอย่างการเพิ่มคอลัมน์ โดยไม่ต้องห่วงเรื่องชนิดของฐานข้อมูลเลยครับ 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();
});
Dropping Columns( ลบคอลัมน์ )
ตัวอย่างหารลบคอลัน์:
$table->drop_column('name');
ตัวอย่างการลบหลายๆคอลัมน์:
$table->drop_column(array('name', 'email'));
Adding Indexes ( สร้าง indexes )
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 แบบเบสิค
Dropping Indexes ( การลบ indexes)
การลบ 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');
Foreign Keys ( การเพิ่มคีย์เชื่อม )
ตัวอย่างการสร้างคีย์เชื่อม:
$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 ครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น