0

Giới thiệu về MorphTo trong Laravel

Khái niệm

MorphTo là một quan hệ đa hình (polymorphic relationship) trong Eloquent, cho phép một model "thuộc về" nhiều loại model khác nhau thông qua một cột chung.

Khi nào dùng?

  • Khi một thực thể liên kết linh hoạt với nhiều thực thể khác (ví dụ: Comment thuộc về Post hoặc Video).
  • Tiết kiệm bảng và tái sử dụng code.

Cấu trúc bảng

Cần 2 cột:

  • xxx_type: Lưu tên model (ví dụ: App\Models\Post).
  • xxx_id: Lưu ID của model liên kết.

Ví dụ migration:

Schema::create('comments', function (Blueprint $table) {
    $table->id();
    $table->text('content');
    $table->morphs('commentable'); // Tạo commentable_id và commentable_type
    $table->timestamps();
});

Thiết lập Model

class Comment extends Model {
    public function commentable() {
        return $this->morphTo();
    }
}

class Post extends Model {
    public function comments() {
        return $this->morphMany(Comment::class, 'commentable');
    }
}

Cách dùng

$comment = Comment::find(1);
$parent = $comment->commentable; // Trả về Post hoặc Video

Ưu điểm

  • Linh hoạt, dễ mở rộng.
  • Giảm số lượng bảng.

Nhược điểm

  • Hiệu suất có thể giảm với dữ liệu lớn.

MorphTo rất hữu ích trong các dự án cần quan hệ đa năng như bình luận, lượt thích, hoặc thông báo.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí