เริ่มต้นอย่างรวดเร็ว
โมเดล webman นี้ขึ้นอยู่กับ Eloquent ORM ทุกรายการในฐานข้อมูลมี "โมเดล" ที่เกี่ยวข้องใช้สื่อสารกับตารางนั้น ๆ คุณสามารถค้นหาข้อมูลในตารางและแทรกบันทึกใหม่ในตารางด้วยโมเดล
ก่อนที่จะเริ่มต้น โปรดตรวจสอบว่าคุณตั้งค่าการเชื่อมต่อฐานข้อมูลใน config/database.php
หมายเหตุ: ในการสนับสนุนตัวกระตุ้นโมเดลคุณต้องนำเข้าเพิ่มเติม
composer require "illuminate/events"
ตัวอย่าง
ตัวอย่าง
<?php
namespace app\model;
use support\Model;
class User extends Model
{
/**
* ชื่อตารางที่เกี่ยวข้องกับโมเดล
*
* @var string
*/
protected $table = 'user';
/**
* กำหนดค่าหลักเริ่มต้น ซึ่งเป็น id โดยค่าหลักคือ 'uid'
*
* @var string
*/
protected $primaryKey = 'uid';
/**
* ระบุว่าต้องการบำรุงรักษาประวัติเวลาโดยอัตโนมัติหรือไม่
*
* @var bool
*/
public $timestamps = false;
}
ชื่อตาราง
คุณสามารถระบุตารางข้อมูลที่กำหนดเองโดยการกำหนดค่าสำหรับสร้างตารางในโมเดล:
class User extends Model
{
/**
* ชื่อตารางที่เกี่ยวข้องกับโมเดล
*
* @var string
*/
protected $table = 'user';
}
คีย์หลัก
Eloquent ยังสมมติว่าทุกรายการในตารางข้อมูลมีคอลัมน์หลักชื่อ id คุณสามารถกำหนดค่าสำหรับคีย์หลักโดยใช้ $primaryKey ที่เป็น protected ได้:
class User extends Model
{
/**
* กำหนดค่าหลักเริ่มต้น ซึ่งเป็น id โดยค่าหลักคือ 'uid'
*
* @var string
*/
protected $primaryKey = 'uid';
}
Eloquent สมมติว่าคีย์หลักเป็นค่าจำนวนเติมที่เพิ่มขึ้นโดยอัตโนมัติ ซึ่งหมายถึงโดยค่าดีฟอลต์คีย์หลักจะถูกแปลงเป็นชนิด int ถ้าคุณต้องการใช้คีย์หลักที่ไม่ได้เพิ่มขึ้นโดยอัตโนมัติหรือไม่ใช่ข้อมูลตัวเลข คุณต้องตั้งค่าของ $incrementing เป็น false ได้ในส่วนของคีย์หลักที่เป็น public:
class User extends Model
{
/**
* ระบุว่าคีย์หลักของโมเดลเป็นค่าเพิ่มขึ้นโดยอัตโนมัติหรือไม่
*
* @var bool
*/
public $incrementing = false;
}
ถ้าคีย์หลักของคุณไม่ใช่ค่าจำนวนเติม คุณต้องตั้งค่าของ $keyType ที่ใช้กับโมเดลเป็น string:
class User extends Model
{
/**
* ประเภทการเพิ่มขึ้นอัตโนมัติของ ID
*
* @var string
*/
protected $keyType = 'string';
}
ประวัติเวลา
โดยค่าดีฟอลต์ Eloquent คาดหวังว่าตารางของคุณจะมี created_at และ updated_at ถ้าคุณไม่ต้องการให้ Eloquent บำรุงรักษาคอลัมน์เหล่านี้โปรดตั้งค่าของ $timestamps ในโมเดลเป็น false:
class User extends Model
{
/**
* ระบุว่าต้องบำรุงรักษาประวัติเวลาโดยอัตโนมัติหรือไม่
*
* @var bool
*/
public $timestamps = false;
}
ถ้าคุณต้องการกำหนดรูปแบบเก็บรักษาประวัติเวลา โปรดตั้งค่าของ $dateFormat ในโมเดลของคุณ คุณสามารถกำหนดวิธีการเก็บข้อมูลวันที่ในฐานข้อมูลและรูปแบบ JSON ของโมเดล
class User extends Model
{
/**
* รูปแบบเก็บรักษาประวัติเวลา
*
* @var string
*/
protected $dateFormat = 'U';
}
ถ้าคุณต้องการกำหนดชื่อคอลัมน์ที่เก็บรักษาประวัติเวลา คุณสามารถตั้งค่าค่าคงที่ CREATED_AT และ UPDATED_AT ของโมเดลเพื่อทำโดย:
class User extends Model
{
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
}
การเชื่อมต่อฐานข้อมูล
โดยค่าดีฟอลต์ โมเดล Eloquent จะใช้การเชื่อมต่อฐานข้อมูลเริ่มต้นที่คุณกำหนดในแอปของคุณ ถ้าคุณต้องการกำหนดการเชื่อมต่อที่แตกต่างกันสำหรับโมเดล โปรดตั้งค่าของ $connection ในโมเดล:
class User extends Model
{
/**
* ชื่อการเชื่อมต่อของโมเดล
*
* @var string
*/
protected $connection = 'ชื่อการเชื่อมต่อ';
}
ค่าเริ่มต้นที่กำหนด
ถ้าคุณต้องการกำหนดค่าเริ่มต้นของคุณสำหรับคอลัมน์บางส่วนในโมเดล คุณสามารถกำหนด $attributes ในโมเดล:
class User extends Model
{
/**
* ค่าเริ่มต้นของโมเดล
*
* @var array
*/
protected $attributes = [
'การเลื่อน' => false,
];
}
การเรียกค้นหาโมเดล
หลังจากการสร้างโมเดลและตารางฐานข้อมูลที่เกี่ยวข้องกัน คุณสามารถค้นหาข้อมูลจากฐานข้อมูลได้ คิดว่าแต่ละโมเดลใน Eloquent คือ Query Builder ที่มีสมรรถนะเข้าถึงข้อมูลที่เกี่ยวข้องได้เร็วขึ้น ตัวอย่างเช่น:
$users = app\model\User::all();
foreach ($users as $user) {
echo $user->name;
}
ข้อแนะนำ: เนื่องจากโมเดล Eloquent ยังเป็น Query Builder คุณควรทราบทุกเมธอดที่สามารถใช้ใน Query Builder คุณสามารถใช้เมธอดเหล่านั้นในการค้นหา Eloquent
เงื่อนไขเพิ่มเติม
เมื่อใช้เมธอด all ของ Eloquent จะทำการส่งคืนผลลัพธ์ทั้งหมดของโมเดล โดยส่วนในแต่ละโมเดล Eloquent สามารถเพิ่มเงื่อนไขในการค้นหาและใช้เมธอด get ในการพบผลลัพธ์จากการค้นหา:
$users = app\model\User::where('name', 'like', '%tom')
->orderBy('uid', 'desc')
->limit(10)
->get();
การโหลดโมเดลใหม่
คุณสามารถใช้วิธี fresh และ refresh เพื่อโหลดโมเดลใหม่ fresh จะโหลดโมเดลใหม่จากฐานข้อมูลโมเดลปัจจุบันจะไม่ได้รับผลกระทบ:
$user = app\model\User::where('name', 'tom')->first();
$fresh_user = $user->fresh();
refresh จะใช้ข้อมูลใหม่จากฐานข้อมูลในการปรับค่าแก้ไขโมเดลปัจจุบันในการโหลดซึ่งนอกจากนั้นมีการโหลดโมเดลซื่ออีกครั้ง:
$user = app\model\User::where('name', 'tom')->first();
$user->name = 'jerry';
$user = $user->fresh();
$user->name; // "tom"
คอลเลกชัน
เมธอด all และ get ของ Eloquent สามารถค้นหาผลลัพธ์มากกว่า 1 รายการและส่งคืนอินสแตนสฉบับ Illuminate\Database\Eloquent\Collection
เอกสาร Collection
นี้มีเมธอดในการจัดการจำนวนมากที่ให้บริการสำหรับผลลัพธ์ Eloquent:
$users = $users->reject(function ($user) {
return $user->disabled;
});
ใช้การอ่าน
เมธอด cursor ให้คุณใช้การอ่านข้อมูลในฐานข้อมูล มันทำการค้นหาข้อมูลแค่ 1 ครั้ง การใช้การอ่านจะช่วยให้ประหยัดทรัพยากรแรมเมื่อทำงานกับข้อมูลจำนวนมาก:
foreach (app\model\User::where('sex', 1')->cursor() as $user) {
//
}
การใช้ cursor จะส่งคืน Illuminate\Support\LazyCollection
เอกสาร Lazy collections ช่วยให้คุณใช้เมธอดในคลัส Laravel ที่เกี่ยวข้องมากที่สุดและจะโหลดโมเดลตัวเดียวขึ้นมาในหน่วยความจำทุกครั้ง:
$users = app\model\User::cursor()->filter(function ($user) {
return $user->id > 500;
});
foreach ($users as $user) {
echo $user->id;
}
คำสั่ง Select ที่เกี่ยวข้อง
Eloquent มีการรองรับ Subquery ที่ขั้นสูง ซึ่งให้คุณสามารถดึงข้อมูลจากตารางที่เกี่ยวข้องด้วยคำสั่ง Query เดียว ตัวอย่างเช่น ถ้าเรามีตารางปลายทาง destinations และตารางเที่ยวบิน flights โดยตาราง flights มีฟิลด์ arrival_at ซึ่งแสดงว่าเที่ยวบินมาถึงปลายทางเมือไหร่
โดยใช้ฟังก์ชัน select และ addSelect จาก Subquery เราสามารถดึงข้อมูลทั้งหมดจากปลายทาง destinations และชื่อเที่ยวบินสุดท้ายที่มาถึงทุกปลายทางได้ดังนี้
use app\model\Destination;
use app\model\Flight;
return Destination::addSelect(['last_flight' => Flight::select('name')
->whereColumn('destination_id', 'destinations.id')
->orderBy('arrived_at', 'desc')
->limit(1)
])->get();
เรียงลำดับโดย Subquery
นอกจากนี้ คำสั่ง orderBy ของ query builder ยังรองรับ Subquery โดยคุณสามารถใช้ฟังก์ชันนี้เพื่อเรียงลำดับปลายทางต่าง ๆ ตามเวลาของเที่ยวบินสุดท้ายที่มาถึง อีกทั้งนี้เราสามารถทำ Subquery ให้ query builder ทำงานด้วยคำสั่งเดียวเท่านั้น:
return Destination::orderByDesc(
Flight::select('arrived_at')
->whereColumn('destination_id', 'destinations.id')
->orderBy('arrived_at', 'desc')
->limit(1)
)->get();
ค้นหาโมเดล / คอลเล็กชันเดียว
นอกเหนือจากการดึงข้อมูลทั้งหมดจากตารางที่ระบุไว้แล้ว คุณยังสามารถใช้ find, first หรือ firstWhere ในการค้นหาเรคคอร์ดเดี่ยว ซึ่งจะคืน instance ของโมเดลเดี่ยว ไม่ใช่คอลเล็กชันของโมเดล:
// ค้นหาโมเดลที่มีคีย์หลัก...
$flight = app\model\Flight::find(1);
// ค้นหาโมเดลแรกที่ตรงเงื่อนไขการค้นหา...
$flight = app\model\Flight::where('active', 1)->first();
// ค้นหาโมเดลแรกที่ตรงเงื่อนไขการค้นหาด้วย firstWhere...
$flight = app\model\Flight::firstWhere('active', 1);
คุณยังสามารถใช้อาร์เรย์ของคีย์หลักเป็นพารามิเตอร์ที่จะใช้ในการเรียกใช้ find ซึ่งจะคืนคอลเล็กชันของเรคคอร์ดที่ตรงกัน:
$flights = app\model\Flight::find([1, 2, 3]);
บางครั้งคุณอาจหวังที่จะดำเนินการอื่นเมื่อไม่พบผลลัพธ์เมื่อค้นหาเรคคอร์ดแรก ฟังก์ชัน firstOr จะคืนค่าเรคคอร์ดแรกเมื่อพบผลลัพธ์ หากไม่พบผลลพธ์ จะดำเนินการ callback ที่กำหนดไว้ ค่าที่ return จาก callback จะคืนค่าของ firstOr:
$model = app\model\Flight::where('legs', '>', 100)->firstOr(function () {
// ...
});
ฟังก์ชัน firstOr ยังรับที่อาร์เรย์ของคอลัมน์เป็นคำสั่งที่จะใช้ใน query ได้เช่นกัน:
$model = app\modle\Flight::where('legs', '>', 100)
->firstOr(['id', 'legs'], function () {
// ...
});
ข้อยกเว้น “ไม่พบ”
บางครั้งคุณอาจหวังที่จะทำการยกเว้นเมื่อไม่พบโมเดล เช่นในภายในคอนโทรลเลอร์และเส้นทาง findOrFail และ firstOrFail จะดึงเรคคอร์ดแรกของค้นหาและหากไม่พบ จะเกิดข้อยกเว้น Illuminate\Database\Eloquent\ModelNotFoundException:
$model = app\modle\Flight::findOrFail(1);
$model = app\modle\Flight::where('legs', '>', 100)->firstOrFail();
ดึงคอลเล็กชัน
คุณยังสามารถใช้ คำสั่ง count, sum และ max จาก query builder และฟังก์ชันอื่น ๆ ที่เกี่ยวกับคอลเล็กชันเพื่อดำเนินการกับคอลเล็กชัน ฟังก์ชันเหล่านี้จะคืนค่าสกัล่าลต์ที่ถูกต้องแทนที่จะเป็น istance ของ model:
$count = app\modle\Flight::where('active', 1)->count();
$max = app\modle\Flight::where('active', 1)->max('price');
เพิ่มข้อมูล
เพื่อเพิ่มข้อมูลเข้าฐานข้อมูล คุณต้องสร้าง instance ของโมเดลใหม่ก่อน ตั้งค่าคุณสมบัติของ instance นั้น ๆ และเรียกใช้ save:
<?php
namespace app\controller;
use app\model\User;
use support\Request;
use support\Response;
class FooController
{
/**
* เพิ่มบันทึกใหม่ในตารางผู้ใช้
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// ยืนยันการร้องขอ
$user = new User;
$user->name = $request->get('name');
$user->save();
}
}
Time ที่่ created_at และ updated_at จะถูกตั้งค่าโดยอัตโนมัติ (when the property $timestamps is true for the model) และไม่จำเป็นต้องตั้งค่าด้วยมือ
การปรับปรุง
ฟังก์ชัน save ยังสามารถใช้ในการปรับปรุงข้อมูลของโมเดลที่มีอยู่ในฐานข้อมูล โดยการอัพเดทค่าที่ต้องการและเรียกใช้ save อีกครั้ง เช่นเดียวกับ updated_at ที่จะถูกอัพเดทโดยอัตโนมัติน ทำให้ไม่จำเป็นต้องตั้งค่าด้วยมือ:
$user = app\model\User::find(1);
$user->name = 'jerry';
$user->save();
การปรับปรุงแบบเป็นกลุ่ม
app\model\User::where('uid', '>', 10)
->update(['name' => 'tom']);
ตรวจสอบการเปลี่ยนแปลงของคุณสมบัติ
Eloquent มี isDirty, isClean และ wasChanged เพื่อตรวจสอบสถานะภายในของโมเดลและกำหนดค่าว่าคุณสมบัติเปลี่ยนไปจากตอนโหลดตั้งแต่ใด ๆ isDirty กำหนดค่าที่กำหนดไว้เมื่อเรคคอร์ดโหลดมาแล้วมีการเปลี่ยนแปลงใด ๆ คุณยังสามารถเรียกใช้พารามิเตอร์พิเศษซึ่งเป็นคุณสมบัติที่จะกำหนดว่าคุณสมบัติใดมีค่าที่เปลี่ยน:
$user = User::create([
'first_name' => 'Taylor',
'last_name' => 'Otwell',
'title' => 'Developer',
]);
$user->title = 'Painter';
$user->isDirty(); // true
$user->isDirty('title'); // true
$user->isDirty('first_name'); // false
$user->isClean(); // false
$user->isClean('title'); // false
$user->isClean('first_name'); // true
$user->save();
$user->isDirty(); // false
$user->isClean(); // true
ฟังก์ชัน wasChanged กำหนดให้ตรวจสอบว่าค่าของคุณสมบัติที่เก็บขี้นการร้องขอล่าสุดไปลิเวล ถึงข่องที่คุณยังสามารถเรียกใช้หรือไม่ก็ได้ไปลิเวลมติ เพื่อดูคุณสมบัติที่เปลี่ยนไป:
$user = User::create([
'first_name' => 'Taylor',
'last_name' => 'Otwell',
'title' => 'Developer',
]);
$user->title = 'Painter';
$user->save();
$user->wasChanged(); // true
$user->wasChanged('title'); // true
$user->wasChanged('first_name'); // false
การกำหนดค่าเป็นกลุ่ม (Batch Assigning)
คุณสามารถใช้เมธอด create เพื่อบันทึกโมเดลใหม่ได้เช่นกัน วิธีนี้จะคืนค่าอินสแตนซ์ของโมเดล อย่างไรก็ตามก่อนที่จะใช้งาน คุณจำเป็นต้องระบุพร็อพเพอร์ตี้ fillable หรือ guarded ในโมเดล เนื่องจากโมเดล Eloquent ทั้งหมดมีค่าเริ่มต้นที่ไม่อนุญาตให้กำหนดค่าเป็นกลุ่ม
เมื่อผู้ใช้งานส่งพารามิเตอร์ HTTP ที่ไม่คาดหวังเข้ามา และพารามิเตอร์นั้นเปลี่ยนแปลงคอลัมน์ในฐานข้อมูลที่คุณไม่ต้องการที่จะเปลี่ยน การโจมตีด้วยการกำหนดค่าเป็นกลุ่มก็จะเกิดขึ้น ตัวอย่างเช่น: ผู้ใช้ที่ไม่ดีอารมณ์อาจส่งพารามิเตอร์ is_admin ผ่านคำขอ HTTP และนำมาให้เมธอด create ดำเนินการ การดำเนินการนี้จะทำให้ผู้ใช้สามารถยกระดับตนเองเป็นผู้ดูแลระบบ
ดังนั้นก่อนที่คุณจะเริ่มต้น คุณควรกำหนดว่าพร็อพเพอร์ตี้ใดบนโมเดลที่สามารถถูกกำหนดค่าเป็นกลุ่ม คุณสามารถทำได้โดยใช้ $fillable บนโมเดล ตัวอย่างเช่น: กำหนดให้พร็อพเพอร์ตี้ name ของโมเดล Flight สามารถถูกกำหนดค่าเป็นกลุ่มได้
<?php
namespace app\model;
use support\Model;
class Flight extends Model
{
/**
* พร็อพเพอร์ตี้ที่สามารถถูกกำหนดค่าเป็นกลุ่ม
*
* @var array
*/
protected $fillable = ['name'];
}
เมื่อเรากำหนดค่าเป็นกลุ่มไว้แล้ว คุณสามารถใช้เมธอด create เพื่อแทรกข้อมูลใหม่ลงในฐานข้อมูลได้ เมธอด create จะคืนอินสแตนซ์ของโมเดลที่บันทึกไว้:
$flight = app\modle\Flight::create(['name' => 'Flight 10']);
หากคุณมีอินสแตนซ์ของโมเดลอยู่แล้ว คุณสามารถส่งอาร์เรย์โดยใช้เมธอด fill เพื่อกำหนดค่า:
$flight->fill(['name' => 'Flight 22']);
$fillable สามารถถือเป็น "รายชื่อที่สามารถถูกกำหนดค่าเป็นกลุ่ม" คุณยังสามารถใช้ $guarded เพื่อดำเนินการเช่นกัน $guarded ประกอบด้วยอาร์เรย์ของพร็อพเพอร์ตี้ที่ไม่อนุญาตให้ถูกกำหนดค่าเป็นกลุ่ม กล่าวคือ $guarded จะทำหน้าที่เป็น "รายชื่อดำ" โปรดทราบ: คุณสามารถใช้ $fillable หรือ $guarded ได้เพียงหนึ่งตัวเท่านั้น ไม่สามารถใช้พร้อมกัน. ในตัวอย่างด้านล่าง ทุกๆ คุณลักษณะภายนอก price สามารถถูกกำหนดค่าเป็นกลุ่ม:
<?php
namespace app\model;
use support\Model;
class Flight extends Model
{
/**
* คุณสมบัติที่ไม่อนุญาตให้กำหนดค่าเป็นกลุ่ม
*
* @var array
*/
protected $guarded = ['price'];
}
หากคุณต้องการที่จะให้ทุกคุณลักษณะสามารถถูกกำหนดค่าเป็นกลุ่ม คุณสามารถกำหนด $guarded เป็นอาร์เรย์ว่างได้:
/**
* คุณสมบัติที่ไม่อนุญาตให้กำหนดค่าเป็นกลุ่ม
*
* @var array
*/
protected $guarded = [];
วิธีการสร้างโมเดลอื่นๆ
firstOrCreate/ firstOrNew
ที่นี่มีสองวิธีที่คุณอาจใช้เพื่อกำหนดค่าเป็นกลุ่ม: firstOrCreate และ firstOrNew วิธี firstOrCreate จะพยายามจะจับคู่ข้อมูลในฐานข้อมูลโดยใช้คีย์/ค่าที่ระบุ หากไม่พบโมเดลในฐานข้อมูล จะสร้างบันทึกหนึ่งที่รวมถึงคุณลักษณะที่ระบุในพารามิเตอร์แรก และคุณลักษณะทางเลือกที่สองที่ระบุ
วิธี firstOrNew ทำการค้นหาในฐานข้อมูลโดยใช้คุณลักษณะที่ระบุ อย่างไรก็ก็ตาย not ถ้าวิธี firstOrNew ค้นหาไม่พบโมเดลที่ตองกับ ก็จะคืนอินสแตนซ์ของโมเดลใหม่ ๆ โดยไม่ได้บันทึกไว้ในฐานข้อมูล คุณต้องเรียกเมธอด save เองเพื่อบันทึก:
// ค้นหาเที่ยวบินด้วยชื่อ ถ้าไม่พบก็สร้าง...
$flight = app\modle\Flight::firstOrCreate(['name' => 'Flight 10']);
// ค้นหาเที่ยวบินด้วยชื่อ หรือสร้างพร้อมคุณลักษณะ delayed และ arrival_time
$flight = app\modle\Flight::firstOrCreate(
['name' => 'Flight 10'],
['delayed' => 1, 'arrival_time' => '11:30']
);
// ค้นหาเที่ยวบินด้วยชื่อ ถ้าไม่พบก็สร้างอินสแตนซ์หนึ่ง
$flight = app\modle\Flight::firstOrNew(['name' => 'Flight 10']);
// ค้นหาเที่ยวบินด้วยชื่อ หรือสร้างอินสแตนซ์ด้วยคุณลักษณะ name, delayed และ arrival_time
$flight = app\modle\Flight::firstOrNew(
['name' => 'Flight 10'],
['delayed' => 1, 'arrival_time' => '11:30']
);
คุณอาจพบว่าต้องการที่จะปรับปรุงโมเดลที่มีอยู่หรือสร้างโมเดลใหม่ในกรณีที่ไม่มีอยู่ ได้รับการสนับสนุนโดยเมธอด updateOrCreate เทียบเทียบกับ firstOrCreate เมธอด updateOrCreate ทำการสืบค้นโมเดลและบันทึกโมเดลจึงไม่จำเป็นต้องเรียก save():
// หากมีเที่ยวบินจากโอคแลนด์ไปมาสันดีเอโก้ ให้ราคาเท่ากับ 99 ดอลลาร์
// ถ้าไม่เจอโมเดลที่ตรงกับ จะสร้างอันใหม่
$flight = app\modle\Flight::updateOrCreate(
['departure' => 'Oakland', 'destination' => 'San Diego'],
['price' => 99, 'discounted' => 1]
);
ลบโมเดล
คุณสามารถเรียกใช้เมธอด delete เพื่อลบอินสแตนท์ของโมเดล:
$flight = app\modle\Flight::find(1);
$flight->delete();
ลบโมเดลโดยใช้คีย์หลัก
app\modle\Flight::destroy(1);
app\modle\Flight::destroy(1, 2, 3);
app\modle\Flight::destroy([1, 2, 3]);
app\modle\Flight::destroy(collect([1, 2, 3]));
ลบโมเดลโดยใช้การสืบค้น
$deletedRows = app\modle\Flight::where('active', 0)->delete();
คัดลอกโมเดล
คุณสามารถใช้เมธอด replicate เพื่อคัดลอกอินสแตนท์ที่ยังไม่ได้บันทึกลงในฐานข้อมูล วิธี replicate มีความสะดวกในกรณีที่อินสแตนท์ของโมเดลมีคุณลักษณะที่หลายคุณมีสิ่งสมัช โดยไม่ต้องลงแรงเพื่อสร้างค่าภายใน:
$shipping = App\Address::create([
'type' => 'shipping',
'line_1' => '123 Example Street',
'city' => 'Victorville',
'state' => 'CA',
'postcode' => '90001',
]);
$billing = $shipping->replicate()->fill([
'type' => 'billing'
]);
$billing->save();
การเปรียบเทียบโมเดล
บางครั้งอาจจำเป็นต้องตรวจสอบว่าสองโมเดล "เหมือนกัน" หรือไม่ การใช้เมธอด is สามารถใช้เพื่อตรวจสอบโมเดลสองอันว่ามีคีย์หลักเหมือนกัน โต๊ะเดียวกันและเชื่อมต่อฐานข้อมูลเดียวกันหรือไม่:
if ($post->is($anotherPost)) {
//
}
ดูการดูแลโมเดล
ใช้โดยอ้างอิง ตัวดูแลของโมเดลและเหตุการณ์ใน Laravel
โปรดทราบ: Eloquent ORM ต้องการที่จะสนับสนุนตัวดูแลโมเดลจะต้องนำ compose เพิ่มเติม
<?php
namespace app\model;
use support\Model;
use app\observer\UserObserver;
class User extends Model
{
public static function boot()
{
parent::boot();
static::observe(UserObserver::class);
}
}