In the Laravel documentation, there is the following example for retrieving morphedByMany relations, which are many-to-many polymorphic relations.
Larav
I use a trick here:
Create a Model Taggable for your connection table taggable and add a hasMany relation to the Tag model.
public function related()
{
return $this->hasMany(Taggable::class);
}
Within your Taggable model create a morphedTo relation.
public function taggables()
{
return $this->morphTo();
}
Now you can get all models witch are using the tag by calling:
$tagged = Tag::with('related.taggables');
You should be able to add a relationship on your Tag class as such
public function taggable()
{
return $this->morphedTo();
}
That will use the taggable_id and taggable_type to get the relevant Model that it is tied to.
Did you think to use the "union" function of the collections to merge all the different collection in order to retrieve all what you need?
class Tag extends Model
{
[...]
/**
* Get all of.
*/
public function morphed()
{
return $this->video->union($this->posts)->all();
}
}