[laravel 5.4] Eloquent Model

23 ส.ค. 2017 , 8,715 Views   , หมวดหมู่ Laravel ทุกหมวดหมู่ โค๊ดดิ้ง   , ป้ายกำกับ:


สร้าง Eloquent Model

สร้างโดยใช้ make:model Artisan command:

ถ้าอยากให้สร้าง database migration (ดูเพิ่มเติม) ให้ด้วย ให้เพิ่ม Option --migration หรือ -m option:

จากนั้นเราจะได้ไฟล์ App/User.php

ในไฟล์ Model ของเราโค๊ดก็จะประมาณนี้

Table Names

โดยปกติหาก Model เราชื่อว่า Flight laravel ก็จะใช้ Model นี้ในดึงข้อมูลและจัดเก็บข้อมูลจากตารางที่ชื่อว่า flights  แต่ถ้าเราอยากจะตั้งชื่อเป็นอย่างอื่นก็ให้ใส่ตัวแปล protected $table = ‘ชื่อตารางที่ต้องการ’ 

Primary Keys

โดยปกติ laravel จะกำหนดว่า column ชื่อว่า id เป็น primary key  แต่ถ้าอยากกำหนดเป็นอย่างอื่นก็ให้กำหนดค่าในตัวแปล $primaryKey

โดยปกติ Primary Key จะเป็น  incrementing integer value (เป็นตัวเลขและรันค่า id อัตโนมัติ) ถ้าหากอยากกำหนดเป็น non-incrementing or a non-numeric  ก็ให้กำหนดในตัวแปล public $incrementing กำหนดเป็นfalse.

Timestamps

โดยค่าเริ่มต้น laravel กำหนดให้มีคอลัมน์ created_at และ updated_at อยู่ในตาราง แต่ถ้าหากไม่ต้องการใช้ก็ให้ใส่ตัวแปล $timestamps เป็น false

หากต้องการเปลี่ยนชื่อของ columns ก็ให้กำหนดในตัวแปลค่าคงที่ CREATED_AT และUPDATED_AT

Database Connection

โดยค่าเริ่มต้นระบบจะกำหนด database connection ตาม configured ของ application (ที่อยู่ในไฟล์ .env หรือ config/app.php) แต่ถ้าอยากจะกำหนด database connection อย่างอื่นเฉพาะ Model นี้ ก็ให้กำหนดใน  $connection

Retrieving Models

สามารถใช้ query builder ในการดึงข้อมูลใน  Eloquent models ได้ สามารถเขียนสคริปดึงข้อมูลได้ทั้งใน routes หรือใน controller

ตัวอย่างเพิ่มเติม

Collections

ในการดึงข้อมูลออกมาซึ่งอาจจะใช้ all และget ข้อมูลที่ได้จะอยู่ในรูปแบบของ Collection สามารถใช้  a variety of helpful methods จัดการข้อมูลที่ได้จาก  Eloquent models นั้นได้

ตัวอย่างเพิ่มเติม

Chunking Results

คือการแบ่ง Query ออกเป็นช่วงๆ จะช่วยประหยัดหน่วยความจำ(memory) เมื่อทำงานกับชุดผลลัพธ์ขนาดใหญ่ ตัวอย่างข้างล่างคือ ระบบจะ query ครั้งล่ะ 200 rows ไปจนกว่าจะสิ้นสุด

Retrieving Single Models / Aggregates

นอกจากการดึงข้อมูลทั้งหมดของตารางที่ระบุ แล้วคุณยังอาจเรียกดูเรคคอร์ดเดียว โดยใช้ find หรือ  first ก็ได้

find สามารถเรียกดูข้อมูลจาก array ของ primary key ได้

Not Found Exceptions

ใช้  findOrFail และfirstOrFail หากหาข้อมูลไม่เจอระบบจะแจ้ง หน้า error 404 อัตโนมัติ

หากหาข้อมูลไม่เจอระบบจะแจ้ง หน้า error 404 อัตโนมัติ

Retrieving Aggregates

สามารถใช้  countsummax และ  aggregate methods ได้ตามตัวอย่างด้านล่าง

Inserting & Updating Models

Inserts

โดยกำหนดค่าให้กับ name โดยค่าส่งมาจากพารามิเตอร์ HTTP request to (ที่อาจจะถูกส่งมาจากฟอร์ม) column  created_at และupdated_at จะถูกอัพเดทให้อัตโนมัติ

Updates

column updated_at จะถูกอัพเดทให้อัตโนมัติ

Mass Updates

ระบบจะทำการอัพเดท column delayed ให้เท่ากับ 1 ทุก Flight ที่ Active=1 และ destination=’San Diego’

Mass Assignment

เราสามารถสร้างข้อมูลได้ในบรรทัดเดียวโดยใช้ create method แต่ก่อนที่จะใช้งาน ต้องกำหนด attribute fillable หรือguardedใน Model ของเราก่อน

fillable  คือกำหนดชื่อของ column ที่อนุญาติให้เข้าถึง

เราสามารถที่จะสร้างข้อมูลให้กับ column name ได้แล้ว

Guarding Attributes

guarded คือกำหนดชื่อของ column ที่ไม่อนุญาติให้เข้าถึง นอกเหนือจากนั้นเข้าถึงได้

หากกำหนด $guarded เป็นค่าว่าง ก็แสดงว่าทุก column สามารถเข้าถึงได้

ตัวอย่างการใช้งาน โดยรับค่าจากฟอร์มด้วย HTTP request (ซึ่งชื่อ input ในฟอร์มต้องตรงกับ column ในตาราง)

Other Creation Methods

firstOrCreatefirstOrNew

firstOrCreate จะค้นหาข้อมูลโดยใช้คอลัมน์ / ค่าที่ระบุ ถ้าไม่พบจะทำการสร้างข้อมูลขึ้นมาด้วยแอตทริบิวต์ที่ระบุ
firstOrNew จะค้นหาข้อมูลโดยใช้คอลัมน์ / ค่าที่ระบุ ถ้าไม่พบจะทำ new model instance ขึ้นมา แต่ยังไม่ได้สร้างข้อมูลใหม่ เราต้องเรียกใช้ save() ด้วยตัวเองเพื่อให้ระบบทำการสร้างข้อมูล

updateOrCreate

ระบบจะทำการอัพเดทข้อมูลหากข้อมูลมีอยู่ แต่หากข้อมูลไม่มี ระบจะสร้างขึ้นมาใหม่ (ไม่ต้องเรียกใช้save() )

Deleting Models

ระบบจะทำการลบข้อมูล Flight ที่มี id=1

Deleting An Existing Model By Key

ในตัวอย่างด้านบนเราจะทำการดึงข้อมูลที่จะลบขึ้นมาก่อนค่อยลบ แต่หากเราจะระบุ primary key ลงไปเลยโดยไม่ต้องดึงข้อมูลก็ทำได้ตามด้านล่าง

Deleting Models By Query

ตัวอย่างด้านล่างคือลบทุก Flight ที่มี column active=0

Soft Deleting

คือการลบข้อมูลโดยที่ไม่ได้ลบออกจากฐานข้อมูลจริงๆ แต่จะไปเพิ่มวันเวลาที่ลบใว้ใน column deleted_at แทน และระบบจะไม่ดึงข้อมูลที่ deleted_at ไม่เท่ากับ null มาแสดง วิธีใช้งาน Soft Deleting ใน Model ให้กำหนดค่าตามด้านล่าง

โดยในตารางต้องมี column  deleted_at โดยอาจจะใช้  schema builder ในขั้นตอนการ migrations-และ-seeding สร้างให้ก็ได้ตามโค๊ดด้านล่าง

หากต้องการตรวจสอบว่า Model นี้มีการตั้งค่า SoftDeletes ใว้ไหม

Querying Soft Deleted Models

Including Soft Deleted Models

ดึงข้อมูลโดยรวมข้อมูลที่ถูกลบแบบ SoftDeletes ด้วย

สามารถใช้กับ Model แบบ Relation ได้

Retrieving Only Soft Deleted Models

ดึงมาเฉพาะข้อมูลที่ถูกลบแบบ SoftDeletes

Restoring Soft Deleted Models

หากต้องการ “ยกเลิกการลบ”  ในการกู้คืนให้ใช้  restore

ตัวอย่างการยกเลิกการลบ หลายๆเรคคอร์ด

สามารถใช้ได้กับ Model Relation ได้

Permanently Deleting Models

ลบข้อมูลที่ลบแบบ  SoftDeletes ออกจากฐานข้อมูลจริงๆ

Query Scopes

คือการสร้างฟังค์ชันที่ใช้สำหรับ Query ในแบบเฉพาะที่เราต้องการ

Global Scopes

คือสร้างฟังค์ชันการ Query ที่ทุกๆ Model สามารถเรียกใช้ได้

Writing Global Scopes

สร้าง Class ชื่อ AgeScope ให้เรา implement ใน method ที่ชื่อ apply

ใน global scope หากต้องการเขียน select column ใน query แนะนำให้ใช้ addSelect (ดูเพิ่มเติม) เพื่อป้องกันการ select ซ้ำซ้อนกัน เวลา Model ต่างๆเรียกใช้งาน

Applying Global Scopes

วิธีการใช้งาน Global Scopes  ให้ทำการ Override boot methodc และใช้งาน addGlobalScope method:

หากเราเรียก query  User::all() คำสั่ง SQL ก็จะถูกสร้างตามด้านล่าง

Anonymous Global Scopes

สามารถกำหนดเงื่อนไขต่างได้

Removing Global Scopes

ไม่ใช้ Global Scopes ใน Query ที่ต้องการ

Local Scopes

สร้างฟังค์ชันการ Query ที่ได้ใช้บ่อยๆใว้ใน Model โดยสร้าง Method ที่ขึ้นต้นด้วย scope

Utilizing A Local Scope

การใช้งาน

ได้คำสั่ง SQL เป็น

Dynamic Scopes

สามารถส่งค่าพารามิเตอร์เข้าไปได้

ตัวอย่างการใช้งาน

 

 

ที่มา : https://laravel.com/docs/5.4/eloquent


ป้ายกำกับ: