2016-03-11 23 views
9

Trong tài liệu Laravel, có ví dụ sau đây để truy xuất quan hệ morphedByMany, là quan hệ đa hình nhiều.Lấy tất cả các quan hệ morphedByMany trong Laravel Eloquent

Laravel Many to Many polymorphic relations documentation

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Tag extends Model 
{ 
    /** 
    * Get all of the posts that are assigned this tag. 
    */ 
    public function posts() 
    { 
     return $this->morphedByMany('App\Post', 'taggable'); 
    } 

    /** 
    * Get all of the videos that are assigned this tag. 
    */ 
    public function videos() 
    { 
     return $this->morphedByMany('App\Video', 'taggable'); 
    } 
} 

Làm thế nào tôi sẽ nhận được một danh sách tất cả morphed quan hệ trong một truy vấn/bộ sưu tập, ví dụ, postsvideos, và sau đó nếu tôi sau này thêm photos (hoặc bất cứ điều gì), điều đó quá?

+0

Bao giờ tìm giải pháp? – robjbrain

+0

Tôi đã làm nhưng tôi không có mã, nó đã ở một công việc cũ ... những gì tôi đã làm về cơ bản là sử dụng trình tạo truy vấn để có được kết quả và xây dựng mô hình với dữ liệu trong một lớp sưu tập tùy chỉnh. –

Trả lời

-2

Bạn sẽ có thể để thêm một mối quan hệ trên lớp Tag của bạn như vậy

public function taggable() 
{ 
    return $this->morphedTo(); 
} 

Đó sẽ sử dụng taggable_id và taggable_type để có được những mẫu có liên quan mà nó được gắn liền với.

+1

Đó là quan hệ đa hình, tôi đặc biệt nói về mối quan hệ morphedByMany là mối quan hệ đa hình nhiều. Tôi sẽ cập nhật câu hỏi để làm rõ hơn. –

0

Bạn có nghĩ sử dụng chức năng "công đoàn" của các bộ sưu tập để hợp nhất tất cả các bộ sưu tập khác nhau để truy xuất tất cả những gì bạn cần không?

class Tag extends Model 
{ 
    [...] 

    /** 
    * Get all of. 
    */ 
    public function morphed() 
    { 
     return $this->video->union($this->posts)->all(); 
    } 
} 
+0

Điều này sẽ không hoạt động đối với trường hợp mà tôi đã thêm nhiều yếu tố biến đổi sau này, mặc dù đối với trường hợp cụ thể của việc nhận video và bài đăng, nó sẽ hoạt động. –

+0

Khi bạn thêm mới morphable, bạn có thể thêm một -> union vào hàm này. Tất nhiên là không hoàn toàn tự động nhưng dù sao bạn phải thay đổi một số dòng mã vào mô hình của bạn ... –

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