ความสัมพันธ์ของ Eloquent
กำหนดความสัมพันธ์แบบ hasOne, hasMany, belongsTo และแบบหลายต่อหลาย
ความสัมพันธ์ของ Eloquent เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องมีความสัมพันธ์
ความสัมพันธ์ของ Eloquent ช่วยให้คุณค้นหาโมเดลที่เกี่ยวข้องด้วย PHP ที่อ่านเข้าใจง่าย แทนการใช้คำสั่ง SQL JOIN ดิบ
hasOne
User หนึ่งรายการมี Profile หนึ่งรายการ ให้กำหนดความสัมพันธ์นี้ในโมเดลเจ้าของ
<?php
class User extends Model {
public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
return $this->hasOne(Profile::class);
}
}
// Access:
$profile = $user->profile;belongsTo
Profile เป็นของ User ให้กำหนดความสัมพันธ์นี้ในโมเดลที่เก็บคีย์นอก
<?php
class Profile extends Model {
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class);
}
}
// Access:
$user = $profile->user;hasMany
User หนึ่งรายการมี Post หลายรายการ เป็นความสัมพันธ์แบบหนึ่งต่อหลายจากฝั่งโมเดลแม่
<?php
class User extends Model {
public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
return $this->hasMany(Post::class);
}
}
// Access:
$posts = $user->posts; // CollectionbelongsTo (ฝั่งหลาย)
Post แต่ละรายการเป็นของ User หนึ่งรายการ
<?php
class Post extends Model {
public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class, "user_id");
}
}หลายต่อหลาย (belongsToMany)
Post หนึ่งรายการมี Tag หลายรายการ และ Tag หนึ่งรายการเป็นของ Post หลายรายการ โดยเชื่อมโยงผ่านตารางตัวกลาง
<?php
class Post extends Model {
public function tags() {
return $this->belongsToMany(Tag::class);
}
}
// Pivot table: post_tag (post_id, tag_id)
$tags = $post->tags;
$post->tags()->attach($tagId);
$post->tags()->detach($tagId);
$post->tags()->sync([1, 2, 3]);hasManyThrough
เข้าถึงโมเดลที่มีความสัมพันธ์ทางอ้อม เช่น Country หนึ่งรายการมี Post หลายรายการผ่าน User
<?php
class Country extends Model {
public function posts() {
return $this->hasManyThrough(Post::class, User::class);
}
}ความสัมพันธ์แบบหลายรูปแบบ
โมเดล Comment ที่สามารถเป็นของ Post หรือ Video ได้ โดยใช้ความสัมพันธ์แบบหลายรูปแบบ
<?php
class Comment extends Model {
public function commentable() {
return $this->morphTo();
}
}
class Post extends Model {
public function comments() {
return $this->morphMany(Comment::class, "commentable");
}
}คำค้นหาการมีอยู่ของความสัมพันธ์
ค้นหาโมเดลโดยพิจารณาจากการมีอยู่ของความสัมพันธ์
<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();whereHas
กรองข้อมูลตามเงื่อนไขของความสัมพันธ์
<?php
$phpPosts = Post::whereHas("tags", function ($q) {
$q->where("name", "PHP");
})->get();เมธอดความสัมพันธ์เทียบกับคุณสมบัติแบบไดนามิก
$user->posts() จะส่งคืนตัวสร้างคำค้นหา ซึ่งคุณสามารถเชื่อมเมธอดต่อได้ ส่วน $user->posts จะส่งคืน Collection ที่โหลดแล้ว
สรุป
กำหนดความสัมพันธ์เป็นเมธอดที่ส่งคืน hasOne, hasMany, belongsTo หรือ belongsToMany เข้าถึงความสัมพันธ์เหล่านี้เป็นคุณสมบัติแบบไดนามิก หรือเชื่อมคำค้นหาต่อจากการเรียกใช้เมธอด
ตรวจสอบความเข้าใจ
ความสัมพันธ์ชนิดใดใช้ตารางตัวกลาง
เรียนรู้ PHP ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 49
- บทเรียน
- 195
คำถามที่พบบ่อย
บทเรียน “ความสัมพันธ์ของ Eloquent” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ความสัมพันธ์ของ Eloquent” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ความสัมพันธ์ของ Eloquent”
กำหนดความสัมพันธ์แบบ hasOne, hasMany, belongsTo และแบบหลายต่อหลาย คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “ความสัมพันธ์ของ Eloquent” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โมเดล Eloquent และการย้ายโครงสร้างฐานข้อมูล
- CRUD ด้วย Eloquent
- ความสัมพันธ์ของ Eloquent
- การโหลดข้อมูลล่วงหน้าและขอบเขตคำสืบค้น