สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
01-406-093-203
การพัฒนาเว็บแอปพลิเคชันด้วยเฟรมเวิร์ค
โดย นายศุภมิตร จันทร์โทวงศ์
- สาขาวิชาระบบสารสนเทศ คณะบริหารธุรกิจ
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 1 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
เช็คชื่อเข้าชั้นเรียน
- ให้นักศึกษาสแกน QR Code นี้เพื่อเข้าสู่ระบบเช็คชื่อเข้าเรียน
- ระบบจะทำการบันทึกประวัติการเข้าเรียนในวิชานี้อัตโนมัติ
ผู้สอนยังไม่ได้เปิดระบบเช็คชื่อสำหรับบทเรียนสัปดาห์นี้ หรือหมดเวลากรอกข้อมูลแล้ว
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 2 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
ดึงข้อมูล (Query Builder)
- Query Builder ใน Laravel จัดทำผ่านคลาส Facade ชื่อ
DB ช่วยอำนวยความสะดวกการจัดการฐานข้อมูล - เขียนโค้ดต่อสายเมธอดสืบค้นคล้ายคำสั่งภาษา SQL ทำให้เขียนอ่านได้รวดเร็วและทนทาน
- ดึงชุดข้อมูลทั้งหมดด้วยเมธอด
get() ดึงคีย์เฉพาะแถวด้วย first() หรือกรองผ่านเงื่อนไขด้วย where() - โครงสร้างการสืบค้นข้อมูลที่เป็นระบบและปลอดภัยจากการฉีดสคริปต์ SQL
code-example.php
use Illuminate\Support\Facades\DB;
// ดึงรายการผู้ใช้งานทั้งหมดที่มีสถานะ Active
$users = DB::table('users')
->where('status', 'active')
->get();
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 3 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
แบบทดสอบก่อนเรียน (Pre-test)
1. คลาส Facade ใดที่ต้องระบุ use ด้านบนสุดของ Controller ก่อนเขียนคำสั่ง Query Builder?
A. use Illuminate\Support\Facades\DB;
B. use DB;
C. use Illuminate\Database\QueryBuilder;
D. use Illuminate\Support\Facades\Schema;
2. คำสั่ง Query Builder ในข้อใดใช้ในการดึงข้อมูลทั้งหมดจากตาราง 'blogs'?
A. DB::table('blogs')->all()
B. DB::table('blogs')->get()
C. DB::table('blogs')->fetch()
D. DB::table('blogs')->select()
3. คำสั่ง Blade Directive ในข้อใดใช้สำหรับวนลูปดึงข้อมูลรายการ $blogs มาแสดงผลในตาราง?
A. @foreach ($blogs as $item)
B. @loop ($blogs as $item)
C. @for ($blogs as $item)
D. @while ($blogs as $item)
4. หากต้องการแสดงผลเนื้อหาบทความโดยย่อเพียง 10 ตัวอักษรแรก ใน Blade View ต้องใช้ Helper ใด?
A. Str::limit($item->content, 10)
B. String::short($item->content, 10)
C. Text::cut($item->content, 10)
D. Substr::limit($item->content, 10)
5. การกำหนด Route ใน routes/web.php สำหรับส่งค่า ID บทความไปลบใน Controller ควรเขียนอย่างไร?
A. Route::get('/delete/{id}', [AdminController::class, 'delete'])->name('delete');
B. Route::delete('/delete', [AdminController::class, 'delete']);
C. Route::get('/delete', [AdminController::class, 'delete']);
D. Route::post('/delete/{id}', [AdminController::class, 'delete']);
6. คำสั่ง Query Builder ใดใช้สำหรับลบแถวข้อมูลที่มีรหัส id ตรงกับพารามิเตอร์ $id ในตาราง 'blogs'?
A. DB::table('blogs')->where('id', $id)->delete();
B. DB::table('blogs')->destroy($id);
C. DB::table('blogs')->remove('id', $id);
D. DB::table('blogs')->drop('id', $id);
7. คำสั่งใดใน Controller ใช้สำหรับสั่งให้เบราว์เซอร์เปลี่ยนทิศทางกลับไปยังหน้า /blog หลังลบข้อมูลสำเร็จ?
A. return redirect('/blog');
B. return view('/blog');
C. return back('/blog');
D. return route('/blog');
8. หากต้องการใส่กล่องข้อความยืนยันการลบข้อมูลบนปุ่ม HTML ก่อนยิง Request ต้องใช้ JavaScript Attribute ใด?
A. onclick="return confirm('คุณต้องการลบบทความนี้จริงหรือไม่?')"
B. ondelete="confirm('ลบหรือไม่?')"
C. onpress="alert('ลบข้อมูล')"
D. oncheck="verify()"
9. คำสั่ง Query Builder ข้อใดใช้สำหรับเพิ่มข้อมูลอาร์เรย์ $data ลงในตาราง 'blogs'?
A. DB::table('blogs')->insert($data);
B. DB::table('blogs')->create($data);
C. DB::table('blogs')->add($data);
D. DB::table('blogs')->save($data);
10. หากลืมระบุ use Illuminate\Support\Facades\DB; ที่หัวไฟล์ Controller แล้วเรียกใช้ DB::table(...) จะเกิดข้อผิดพลาดใด?
A. Class 'DB' not found
B. Database connection failed
C. Table not found
D. Syntax error in Query Builder
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 4 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
Laravel Database Query Builder Documentation
- เอกสารอ้างอิงการใช้งาน Database Query Builder จากเว็บไซต์ทางการของ Laravel
- มีเมธอดสำหรับการจัดการสืบค้น ค้นหา กรองข้อมูล และทำ SQL Operations ที่หลากหลาย
- รองรับการป้องกัน SQL Injection ด้วยการใช้ PDO Parameter Binding โดยอัตโนมัติ
Laravel Database Query Builder Docs
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 5 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การเรียกใช้ DB Facade
- ต้องระบุคำสั่ง
use Illuminate\Support\Facades\DB; ที่ส่วนบนสุดของ Controller ก่อนเรียกใช้ - หากลืมเขียนคำสั่งนำเข้า
use นี้ ระบบจะขึ้นข้อผิดพลาด Class 'DB' not found - เป็นการเปิดใช้งานการเชื่อมต่อฐานข้อมูลและฟังก์ชัน Database Query Builder ทั้งหมด
code-example.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class UserController extends Controller
{
/**
* Show a list of all of the application's users.
*/
public function index(): View
{
$users = DB::table('users')->get();
}
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 6 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
ตัวอย่างการระบุ use DB Facade ใน AdminController.php
- แสดงโครงสร้างไฟล์ Controller จริงในโปรเจกต์
app/Http/Controllers/AdminController.php - ระบุคำสั่ง
use Illuminate\Support\Facades\DB; ที่ส่วนบนสุดของไฟล์ร่วมกับ Request Class - เตรียมความพร้อมให้พร้อมใช้งาน DB Facade ภายในเมธอด
blog() หรือฟังก์ชันอื่นๆ
code-example.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AdminController extends Controller
{
function blog()
{
// ...
}
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 7 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การดึงข้อมูลทั้งหมดด้วย DB::table()->get() ใน Controller
- เขียนคำสั่ง
$blogs = DB::table("blogs")->get(); ภายในฟังก์ชัน blog() ใน Controller - ดึงรายการบทความทั้งหมดจากตาราง
blogs ในฐานข้อมูลมาเก็บไว้ในตัวแปร $blogs - ส่งตัวแปร
$blogs ไปแสดงผลที่ View ชื่อ blog ผ่านฟังก์ชัน compact('blogs')
code-example.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class AdminController extends Controller
{
function blog()
{
$blogs = DB::table("blogs")->get();
return view("blog", compact('blogs'));
}
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 8 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การวนลูปแสดงผลข้อมูลใน View (blog.blade.php)
- ใช้คำสั่ง
@foreach ($blogs as $item) เพื่อวนลูปดึงข้อมูลบทความทีละรายการแสดงในตาราง HTML - เข้าถึงคอลัมน์จากฐานข้อมูลโดยตรงผ่านตัวแปรวัตถุ เช่น
{{$item->title}} และ {{$item->content}} - ตรวจสอบสถานะด้วยเงื่อนไข
@if($item->status) เพื่อแสดงป้ายสถานะ 'เผยแพร่' หรือ 'ฉบับร่าง'
code-example.html
<tbody>
@foreach ($blogs as $item)
<tr>
<td>{{$item->title}}</td>
<td>{{$item->content}}</td>
<td>
@if($item->status)
<span class="btn btn-outline-success">เผยแพร่</span>
@else
<span class="btn btn-outline-danger">ฉบับร่าง</span>
@endif
</td>
</tr>
@endforeach
</tbody>
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 9 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การย่อคำเนื้อหาใน View ด้วย Str::limit
- ใช้คำสั่ง
{{Str::limit($item->content, 10)}} เพื่อแสดงผลเฉพาะ 10 ตัวอักษรแรกของเนื้อหา (เน้นย้ำในกรอบสีแดง) - ช่วยให้ตารางแสดงผลเป็นระเบียบสวยงาม ไม่ยาวเกินไปเมื่อข้อความในฐานข้อมูลมีขนาดยาว
- Helper Class
Str ของ Laravel จะทำการเติม ... ต่อท้ายข้อความโดยอัตโนมัติ
code-example.html
<tbody>
@foreach ($blogs as $item)
<tr>
<td>{{$item->title}}</td>
<td>{{Str::limit($item->content, 10)}}</td>
<td>
@if($item->status)
<span class="btn btn-outline-success">เผยแพร่</span>
@else
<span class="btn btn-outline-danger">ฉบับร่าง</span>
@endif
</td>
</tr>
@endforeach
</tbody>
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 10 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
ลบข้อมูล (Query Builder)
- การสั่งถอนแถวข้อมูลออกจากฐานตารางอย่างถาวรโดยระบุคีย์เป้าหมาย
- ควรประกาศคำสั่งคัดกรองแถวผ่านเมธอด
where() เสมอก่อนรันคำสั่งทำลาย เพื่อไม่ให้กระทบข้อมูลอื่น - ประมวลผลการทำลายแถวข้อมูลด้วยการต่อท้ายด้วยเมธอด
delete() - ตัวอย่างการเขียนคำสั่งลบประวัติตามรหัส ID ของผู้ใช้งาน
code-example.php
// ลบแถวข้อมูลหนังสือรหัส ID ที่รับมาจาก Route
public function destroy($id)
{
DB::table('books')->where('id', $id)->delete();
return redirect()->back();
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 11 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การเพิ่มคอลัมน์ปุ่มกดสำหรับลบบทความใน View
- เพิ่มส่วนหัวตาราง
<th scope="col">ลบบทความ</th> ในส่วน <thead> (เน้นย้ำในกรอบสีแดง) - เตรียมพื้นที่คอลัมน์สำหรับใส่ปุ่มหรือลิงก์สั่งลบรายการข้อมูลตาม ID ในแถวนั้นๆ
- ปิดคอมเมนต์คอลัมน์เนื้อหา
<!-- <th scope="col">เนื้อหา</th> --> หากต้องการซ่อนคอลัมน์ที่ไม่จำเป็น
code-example.html
@section('title', 'บทความทั้งหมด')
@section('content')
<h2 class="text text-center py-2">บทความทั้งหมด</h2>
<table class="table table-bordered text-center">
<thead>
<tr>
<th scope="col">บทความ</th>
<!-- <th scope=___STRING_6___>เนื้อหา</th> -->
<th scope="col">สถานะ</th>
<th scope="col">ลบบทความ</th>
</tr>
</thead>
<tbody>
@foreach ($blogs as $item)
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 12 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การสร้างปุ่มลบบทความในตาราง View
- สร้างปุ่มแท็ก
<td><a href="#" class="btn btn-danger">ลบ</a></td> ในตารางแสดงผล (เน้นย้ำในกรอบสีแดง) - ใช้คลาส Bootstrap
btn btn-danger เพื่อให้ปุ่มเป็นสีแดงสื่อถึงการลบข้อมูล - เตรียมพร้อมส่งค่า ID หรือกำหนด Route สำหรับเชื่อมโยงกับฟังก์ชันลบข้อมูลต่อไป
code-example.html
@foreach ($blogs as $item)
<tr>
<td>{{$item->title}}</td>
<!-- <td>{{Str::limit($item->content, 10)}}</td> -->
<td>
@if($item->status)
<span class="btn btn-outline-success">เผยแพร่</span>
@else
<span class="btn btn-outline-danger">ฉบับร่าง</span>
@endif
</td>
<td><a href="#" class="btn btn-danger">ลบ</a></td>
</tr>
@endforeach
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 13 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การกำหนด Route สำหรับลบข้อมูล (routes/web.php)
- สร้างเส้นทางแบบ GET ในไฟล์
routes/web.php (เน้นย้ำในกรอบสีแดง) - กำหนด Route Path เป็น
/delete/{id} โดยระบุ Parameter {id} เพื่อรับรหัสรายการที่จะทำการลบ - เชื่อมโยงกับ Action Method
delete ใน AdminController และตั้งชื่อ Route ด้วย ->name('delete')
code-example.php
use App\Http\Controllers\AdminController;
Route::get('/about', [AdminController::class, 'about'])->name('about');
Route::get('/blog', [AdminController::class, 'blog'])->name('blog');
Route::get('/create', [AdminController::class, 'create'])->name('create');
Route::post('/insert', [AdminController::class, 'insert']);
// เส้นทางสำหรับลบข้อมูลตาม id
Route::get('/delete/{id}', [AdminController::class, 'delete'])->name('delete');
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 14 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การเขียนฟังก์ชันลบข้อมูล delete($id) ใน Controller
- สร้างเมธอด
function delete($id) ใน AdminController.php เพื่อรับค่า ID (เน้นย้ำในกรอบสีแดง) - ใช้คำสั่ง
DB::table("blogs")->where('id', $id)->delete(); เพื่อระบุและลบแถวข้อมูลตาม ID - ลบแถวที่มี ID ตรงกับค่าที่ถูกส่งมาจาก Route เส้นทาง
/delete/{id} โดยอัตโนมัติ
code-example.php
// ฟังก์ชันลบรายการข้อมูลตามรหัส ID ใน AdminController.php
function delete($id)
{
DB::table("blogs")->where('id', $id)->delete();
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 15 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การเปลี่ยนทิศทางกลับหน้าหลักหลังลบข้อมูลด้วย redirect()
- เพิ่มคำสั่ง
return redirect('/blog'); หลังคำสั่งลบข้อมูลในฟังก์ชัน delete($id) - หลังจากลบข้อมูลในฐานข้อมูลสำเร็จ ระบบจะนำผู้ใช้กลับไปยังหน้าแสดงรายการบทความ (
/blog) ทันที - ช่วยให้หน้าเว็บรีเฟรชอัปเดตตารางข้อมูลล่าสุดโดยผู้ใช้งานไม่ต้องกด F5 หรือเปลี่ยนหน้าด้วยตนเอง
code-example.php
// ลบรายการข้อมูลแล้วนำผู้ใช้งานกลับไปยังหน้า /blog
function delete($id)
{
DB::table("blogs")->where('id', $id)->delete();
return redirect('/blog');
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 16 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การผูก Route และสร้างป๊อบอัพยืนยันการลบข้อมูล (confirm)
- ใช้ Helper
route('delete', $item->id) เพื่อสร้างลิงก์การลบที่ระบุ ID รายการบทความโดยอัตโนมัติ - เพิ่มกิจกรรม
onclick="return confirm('คุณต้องการลบบทความนี้จริงหรือไม่?')" เพื่อแสดงกล่องแจ้งยืนยันก่อนลบ (เน้นย้ำในกรอบสีแดง) - หากผู้ใช้กด 'ยกเลิก' (Cancel) คำสั่งลบจะถูกยกเลิก ไม่ส่ง Request ไปยัง Controller
code-example.html
<td>
<a href="{{ route('delete', $item->id) }}" class="btn btn-danger"
onclick="return confirm('คุณต้องการลบบทความนี้จริงหรือไม่?')">ลบ</a>
</td>
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 17 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
บันทึกข้อมูล (Query Builder)
- การรับค่าที่คัดกรองแล้วผ่านอาเรย์กุญแจแล้วส่งเข้าบันทึกเป็นคีย์แถวใหม่ลงในตารางระบบ
- ดำเนินการโดยการส่งชุดข้อมูลอาร์เรย์แบบจับคู่คีย์-ค่าผ่านเมธอด
insert() - ตัวระบบจะส่งตัวเลข ID แถวล่าสุดที่สร้างให้กลับมาหากทำการสลับเปลี่ยนไปรันผ่านเมธอด
insertGetId() - ตัวอย่างคำสั่งเขียนประวัติการเข้าใช้งานแอปพลิเคชัน
code-example.php
// นำข้อมูลลงบันทึกในตาราง
DB::table('customers')->insert([
'name' => 'สมเกียรตื',
'email' => '[email protected]',
'created_at' => now(),
]);
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 18 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
การเพิ่มข้อมูลเข้าฐานข้อมูลด้วย DB::table()->insert() และ redirect()
- จัดเตรียมโครงสร้างอาร์เรย์ข้อมูล
$data โดยรับค่าจากฟอร์มผ่าน $request->title และ $request->content - ใช้คำสั่ง
DB::table("blogs")->insert($data); เพื่อบันทึกแถวข้อมูลใหม่ลงในตาราง blogs - ส่งผู้ใช้กลับไปยังหน้า
/blog ด้วยคำสั่ง return redirect('/blog'); เพื่อแสดงรายการข้อมูลล่าสุด
code-example.php
// เตรียมอาร์เรย์ข้อมูลและเพิ่มลงในตาราง blogs
$data = [
'title' => $request->title,
'content' => $request->content,
];
DB::table("blogs")->insert($data);
return redirect('/blog');
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 19 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
คำสั่งบันทึกข้อมูลและ Redirect ใน AdminController.php
- ประมวลผลคำสั่ง
DB::table("blogs")->insert($data); เพื่อเขียนระเบียนข้อมูลใหม่ลงในตาราง (เน้นย้ำในกรอบสีแดง) - สั่งการให้ระบบตอบกลับด้วย
return redirect('/blog'); เพื่อนำทางผู้ใช้กลับไปยังหน้าบทความทั้งหมดทันที - ป้องกันปัญหาผู้ใช้งานกด Refresh หน้าฟอร์มซ้ำแล้วส่งข้อมูลซ้ำลงในฐานข้อมูล (PRG Pattern)
code-example.php
// บันทึกอาร์เรย์ข้อมูล $data ลงตาราง blogs แล้วย้ายไปยังหน้า /blog
DB::table("blogs")->insert($data);
return redirect('/blog');
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 20 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
แบบทดสอบหลังเรียน (Post-test)
1. คำสั่ง Query Builder ใดใช้สำหรับลบแถวข้อมูลที่มีรหัส id ตรงกับพารามิเตอร์ $id ในตาราง 'blogs'?
A. DB::table('blogs')->destroy($id);
B. DB::table('blogs')->where('id', $id)->delete();
C. DB::table('blogs')->remove('id', $id);
D. DB::table('blogs')->drop('id', $id);
2. คลาส Facade ใดที่ต้องระบุ use ด้านบนสุดของ Controller ก่อนเขียนคำสั่ง Query Builder?
A. use DB;
B. use Illuminate\Database\QueryBuilder;
C. use Illuminate\Support\Facades\DB;
D. use Illuminate\Support\Facades\Schema;
3. คำสั่ง Query Builder ข้อใดใช้สำหรับเพิ่มข้อมูลอาร์เรย์ $data ลงในตาราง 'blogs'?
A. DB::table('blogs')->create($data);
B. DB::table('blogs')->add($data);
C. DB::table('blogs')->save($data);
D. DB::table('blogs')->insert($data);
4. คำสั่ง Query Builder ในข้อใดใช้ในการดึงข้อมูลทั้งหมดจากตาราง 'blogs'?
A. DB::table('blogs')->get()
B. DB::table('blogs')->all()
C. DB::table('blogs')->fetch()
D. DB::table('blogs')->select()
5. คำสั่งใดใน Controller ใช้สำหรับสั่งให้เบราว์เซอร์เปลี่ยนทิศทางกลับไปยังหน้า /blog หลังลบข้อมูลสำเร็จ?
A. return view('/blog');
B. return redirect('/blog');
C. return back('/blog');
D. return route('/blog');
6. หากต้องการแสดงผลเนื้อหาบทความโดยย่อเพียง 10 ตัวอักษรแรก ใน Blade View ต้องใช้ Helper ใด?
A. String::short($item->content, 10)
B. Text::cut($item->content, 10)
C. Str::limit($item->content, 10)
D. Substr::limit($item->content, 10)
7. หากต้องการใส่กล่องข้อความยืนยันการลบข้อมูลบนปุ่ม HTML ก่อนยิง Request ต้องใช้ JavaScript Attribute ใด?
A. ondelete="confirm('ลบหรือไม่?')"
B. onclick="return confirm('คุณต้องการลบบทความนี้จริงหรือไม่?')"
C. onpress="alert('ลบข้อมูล')"
D. oncheck="verify()"
8. คำสั่ง Blade Directive ในข้อใดใช้สำหรับวนลูปดึงข้อมูลรายการ $blogs มาแสดงผลในตาราง?
A. @loop ($blogs as $item)
B. @for ($blogs as $item)
C. @while ($blogs as $item)
D. @foreach ($blogs as $item)
9. หากลืมระบุ use Illuminate\Support\Facades\DB; ที่หัวไฟล์ Controller แล้วเรียกใช้ DB::table(...) จะเกิดข้อผิดพลาดใด?
A. Class 'DB' not found
B. Database connection failed
C. Table not found
D. Syntax error in Query Builder
10. การกำหนด Route ใน routes/web.php สำหรับส่งค่า ID บทความไปลบใน Controller ควรเขียนอย่างไร?
A. Route::delete('/delete', [AdminController::class, 'delete']);
B. Route::get('/delete', [AdminController::class, 'delete']);
C. Route::get('/delete/{id}', [AdminController::class, 'delete'])->name('delete');
D. Route::post('/delete/{id}', [AdminController::class, 'delete']);
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 21 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
คำถามท้ายบทเรียน
คลาสด่านหน้า (Facade) ใดที่จำเป็นต้องเรียกใช้ด้านบนไฟล์โปรแกรมเพื่อเขียนคิวรีข้อมูลแบบ Query Builder?
A. use DB;
B. use Illuminate\Support\Facades\DB;
C. use Database\Query\Builder;
D. use Eloquent\Model;
คำอธิบาย: คลาสอ้างอิงของระบบฐานข้อมูล Laravel คือ use Illuminate\Support\Facades\DB;
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 22 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
Workshop 9: เขียนฟังก์ชันดึงข้อมูล บันทึกข้อมูล และลบบทความด้วย Query Builder
- 1นำเข้าคลาส Facade ด้วย use Illuminate\Support\Facades\DB; ด้านบนสุดของ AdminController
- 2เขียนคำสั่งดึงข้อมูลบทความทั้งหมด DB::table('blogs')->get() และวนลูปแสดงผลใน blog.blade.php พร้อมใช้ Str::limit
- 3ตั้งค่า Route /delete/{id} และเขียนฟังก์ชัน delete($id) สั่งลบข้อมูลด้วย DB::table('blogs')->where('id', $id)->delete() พร้อม redirect('/blog')
- 4สร้างปุ่มลบพร้อมใส่ onclick confirm ยืนยันการลบ และเขียนฟังก์ชันบันทึกข้อมูลบทความด้วย DB::table('blogs')->insert($data)
command_prompt.sh
// ฟังก์ชันลบข้อมูลบทความตาม ID และเปลี่ยนทิศทางใน AdminController.php
function delete($id)
{
DB::table("blogs")->where('id', $id)->delete();
return redirect('/blog');
}
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 23 / 24
สัปดาห์ที่ 9 • การจัดการข้อมูลด้วย Query Builder01-406-093-203 Laravel Course
ใบงานที่ 9: พัฒนาระบบแสดงรายการ บันทึก และลบบทความด้วย Query Builder
เขียนโปรแกรมจัดการข้อมูลบทความด้วย Query Builder (DB Facade) ใน AdminController โดยสร้างระบบแสดงรายการบทความทั้งหมดพร้อมตัดข้อความย่อ (Str::limit), ระบบสร้างปุ่มลบพร้อมยืนยัน (confirm), Route /delete/{id}, คำสั่งลบแถวข้อมูลตาม ID (delete), คำสั่งบันทึกข้อมูลบทความใหม่ (insert) และการย้ายหน้าอัตโนมัติ (redirect)
เกณฑ์การตรวจประเมินผล:
- การนำเข้า use DB Facade และเขียนคำสั่งดึงข้อมูล DB::table('blogs')->get() แสดงผลใน View ร่วมกับ @foreach และ Str::limit30%
- การตั้งค่า Route /delete/{id} และการเขียนฟังก์ชัน delete($id) สั่งลบข้อมูลด้วย DB::table('blogs')->where('id', $id)->delete() พร้อม redirect40%
- การเพิ่มปุ่มลบพร้อม onclick confirm ยืนยันการลบและการบันทึกข้อมูลเข้าตาราง blogs ด้วย insert()30%
อาจารย์ผู้บรรยาย: ศุภมิตร จันทร์โทวงศ์สไลด์ที่ 24 / 24