2016-03-11 5 views
9

В документации Laravel приведен пример использования отношений morphedByMany, которые являются полиморфными отношениями «много ко многим».Извлечение всех отношений morphedByMany в 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'); 
    } 
} 

Как бы я получить список всех morphed отношений в один запрос/коллекции, например, posts и videos, а затем, если я позже добавил photos (или что-нибудь), что тоже?

+0

Когда-нибудь решение? – robjbrain

+0

Я сделал, но у меня нет кода, это было на старой работе ... то, что я сделал, в основном использовало построитель запросов для получения результатов и построения моделей с данными в пользовательском классе коллекции. –

ответ

-2

Вы должны иметь возможность добавлять отношения вашего класса Tag как таковой

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

Это будет использовать taggable_id и taggable_type, чтобы получить соответствующую модель, что она привязана к.

+1

Это для полиморфных отношений, я специально говорю о взаимоотношениях morphedByMany, которые являются полиморфными отношениями многих-ко-многим. Я уточню вопрос, чтобы сделать это более ясным. –

0

Считаете ли вы, что использовать функцию union для коллекций для объединения всей коллекции, чтобы получить все, что вам нужно?

class Tag extends Model 
{ 
    [...] 

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

Это не сработает для экземпляра, где позже я добавил более измененные элементы, хотя для конкретного случая получения видео и сообщений он будет работать. –

+0

Когда вы добавите новый morphable, вы можете добавить a -> union в эту функцию. Конечно, не полностью автоматическая, но в любом случае вам нужно изменить некоторые строки кода в своей модели ... –

Смежные вопросы