PHP Academy · บทเรียน

ความสัมพันธ์ของ Eloquent

กำหนดความสัมพันธ์แบบ hasOne, hasMany, belongsTo และแบบหลายต่อหลาย

บทเรียน 3 จาก 413 ขั้นตอน

ความสัมพันธ์ของ 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; // Collection

belongsTo (ฝั่งหลาย)

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โมเดล Eloquent และการย้ายโครงสร้างฐานข้อมูล
  2. CRUD ด้วย Eloquent
  3. ความสัมพันธ์ของ Eloquent
  4. การโหลดข้อมูลล่วงหน้าและขอบเขตคำสืบค้น
← กลับไปที่ PHP Academy