2017-06-20 70 views
5

Tôi đang làm việc trên một trang web mà đã mở rộng mô hình, ví dụ như.mối quan hệ Laravel hùng biện với Models Extended

class Asset extends Model { 

    public function project() { 
    return $this->belongsTo(Project::class); 
    } 
} 

class Video extends Asset { 

} 

Tôi có cần phải thiết lập các mối quan hệ cùng hùng biện belongsTo với lớp mở rộng, hoặc nhờ các tầng lớp phụ huynh có nó, Laravel sẽ làm phần còn lại?

Thêm vào đó, là có bất kỳ tài liệu bất cứ nơi nào mà đi vào chi tiết về cách cấu trúc các mối quan hệ như vậy (ví dụ. Về Kiểm soát)? Tôi không thể tìm thấy bất kỳ thứ gì trên trang web Laracasts (thường xuất sắc).

+1

nếu bạn không ghi đè lên dự án sau đó nó sẽ được thừa hưởng từ cha mẹ như vậy. – apokryfos

+0

Hãy xem bài đăng này: https://stackoverflow.com/questions/4961906/when-to-implement-and-extend –

Trả lời

2

Bạn không cần phải dụ phương pháp mở rộng hai lần, trừ khi bạn muốn ghi đè lên nó với một hành vi khác nhau.

Cá nhân tôi sử dụng rất nhiều thừa kế trong các ứng dụng của mình và nó hoạt động giống như bạn mong đợi, mọi mối quan hệ tiếp tục hoạt động và truy vấn bằng cách sử dụng giá trị mặc định gốc hoặc biến được bảo vệ cụ thể mà bạn khai báo. Ví dụ, nếu bạn khai báo một số $table = 'foo' được bảo vệ, đứa trẻ cũng sẽ lấy biến đó để thực hiện truy vấn của nó, hoặc bạn có thể ghi đè lên nó để đứa trẻ truy vấn một bảng khác với cha/mẹ.

Về tài liệu, lý do bạn không được tìm nhiều thông tin tôi nghĩ rằng đó là bởi vì đây là thêm một PHP và vấn đề OOP hơn là một khuôn khổ nhất định.

Nếu bạn muốn khai báo quan hệ đa hình, đây là một cách thực sự phổ biến để thực hiện đa thừa kế trong SQL của bạn, Laravel có lưng của bạn, với Eloquent relationsmigration commands cụ thể, như $table->morphs('asset');.

Hy vọng điều này sẽ giúp bạn.

Các vấn đề liên quan