สำหรับ Model ใน Laravel มีการใช้ Eloquent ORM ที่มาพร้อมกับ Laravel ซึ่งใช้งาน ActiveRecord ที่ทำให้เราเขียนโค๊ดเป็นระเบียบสวยงามและเรียบง่าย ในแต่ละตารางฐานข้อมูลมี “Model” ที่เป็นแบบจำลองให้เราสามารถทำงานกับฐานข้อมูล บนการเขียนโค๊ดได้ เปรียบเทียบง่ายๆเช่นเรามี ตาราง products, customer เราก็จะมี Model Product.php, Customer.php เป็นต้น
ก่อนเริ่มสร้าง Model เราต้องแน่ใจก่อนว่าเรามีการเชื่อมต่อฐานข้อมูลแล้ว วิธีการตรวจสอบสามารถเข้าไปตั้งค่าที่ ไฟล์ .env ดังนี้
1 2 3 |
DB_DATABASE=myblog DB_USERNAME=root DB_PASSWORD=mypassword |
Model เวลาเราสร้างแล้วไฟล์จะไปอยู่ที่ App ซึ่งเราสามารถนำไปไว้ที่ไหนก็ได้ แต่ในตัวอย่าง และคำแนะนำของผมผมจะแนะนำให้เรานำไฟล์ Model ไปไว้ที่ App\Models และวิธีการสร้าง Model ให้เราเปิด Command line มาแล้ว ให้พิมพ์คำสั่ง ตามโค๊ดด้านล่าง
1 |
php artisan make:model Models/Flight |
เรามาเข้ามาดูไฟล์ที่เราสร้างในโฟล์เดอร์ App/Models/Flight.php
Laravel artisan ยังมีความสามารถในการสร้างไฟล์ migration ได้อีกด้วย (สำหรับ migration คือการเขียนโค๊ด PHP สร้างตารางในฐานข้อมูล) โดยคำสั่งให้เรา เติมคำ –migration หรือ -m ต่อท้าย ลองดูตัวอย่างครับ
1 |
php artisan make:model Models/Flight -m |
หลังจากใช้คำสั่งสร้าง Model พร้อม Migration แล้วไฟล์ Migration จะอยู่ในโฟล์เดอร์ database/migrations
ให้เรากลับไปเปิดไฟล์ XXX_XX_XX_XXXXX_create_flights_table.php ในโฟล์เดอร์ database/migrations แล้วเพิ่มเติมโค๊ดลงไปแบบตัวอย่างด้านล่าง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateFlightsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('flights', function (Blueprint $table) { $table->id(); $table->string('name')->nuallable(); $table->string('detail')->nuallable(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('flights'); } } |
หลังจากนั้น run คำสั่ง
1 |
php artisan migrate |
ให้คำสั่งไป excute โค๊ดให้สร้างตาราง หลังจาก run แล้วเราจะได้ผลลัพท์คือได้ตาราง flights มา
ต่อไปเราจะมาดู Model กันต่อว่ามีอะไรบ้าง
Table Name
เวลาเราสร้าง Model มานั้น Laravel จะ จดจำชื่อ Model กับ ชื่อตารางเป็นอันเดียวกันเช่น Model Flight ตารางในฐานข้อมูลเป็น flights แต่ที่นี้ถ้าชื่อตารางเป็นชื่ออื่นเช่น my_flights ละ ต้องทำแบบไหน วิธีการคือให้ใส่คำสั่ง protected $table = ‘my_flights’; ลงไปใน Model เดี่ยวมาดู โค๊ดแบบเต็มกัน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'my_flights'; } |
Primary Key
โดย Model จะจดจำ Primary key ของตารางเป็น id หากเราใช้ชื่อ flight_id เป็น Primary key สามารถเปลี่ยนได้ โดยเขียนคำสั่ง protected $primaryKey = ‘flight_id’;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * The primary key associated with the table. * * @var string */ protected $primaryKey = 'flight_id'; } |
Timestamps
ค่าเริ่มต้นสำหรับ การบันทึกเวลาอัตโนมัติ ใน Model นั้นจะต้องมีคอลัมน์ created_at, updated_at แต่ในบางทีตารางเราไม่จำเป็นต้องมีการบันทึกเวลาไม่ต้องมี คอลัมน์เหล่านี้ ถ้าเราไม่ยกเลิกใช้งาน timestamps ใน Model เวลาเราบันทึกข้อมูล จะเกิด Error วิธีการแก้ไขนั้นให้เขียนคำสั่ง public $timestamps = false;
และอีกทั้งคุณยังไม่จำเป็นต้องกำหนดคอลัมน์ให้เป็นชื่อ created_at, updated_at สามารถเปลี่ยนชื่อได้ โดยเขียนคำสั่ง
const CREATED_AT = ‘creation_date’;
const UPDATED_AT = ‘last_update’;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Flight extends Model { /** * Indicates if the model should be timestamped. * * @var bool */ const CREATED_AT = 'creation_date'; const UPDATED_AT = 'last_update'; public $timestamps = false; } |
Retrieving Models
เมื่อเราสร้าง Model และ ตารางในฐานข้อมูลแล้ว เราก็พร้อมสำหรับการดึงข้อมูลที่ต้องการจากฐานข้อมูล โดยใช้ Eloquent model ในการทำ Query builder กับ Model ลองมาดูตัวอย่างโดยเขียน ไว้ใน Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Flight; class WelcomeController extends Controller { public function index() { $flights = Flight::all(); foreach ($flights as $flight) { echo $flight->name; } } } |
และถ้าหากเราต้องการให้ข้อมูลเรียกเอาเฉพาะ Active=1 และ เรียงข้อมูลคอลัมน์ name จาก มากไปน้อย และดึงมาแค่ 10 รายการ สามารถเขียนได้ดังนี้
1 2 3 4 |
$flights = Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get(); |
ตรงนี้ เราสามารถดูคำสั่งในการ query builder ได้ที่ https://laravel.com/docs/7.x/queries
สรุป
สำหรับ บทความ พื้นฐาน Model มีเพียงเท่านี้ครับ และมีภาคต่อของ Model และเนื้อหาที่เกี่ยวข้องด้วย คือ การทำ Migration และการทำ Relation Model
สำหรับเนื้อหาส่วนนี้โดยรวมพูดถึงวิธีการสร้าง Model และภาพรวมว่า มีขั้นตอนการดึงข้อมูล การปรับแต่ง Model อะไรบ้าง รายละเอียดในบทความนี้หวังว่าจะเป็นแนวทางในการพัฒนาระบบของผู้อ่าน นะครับ