在Laravel文档中,有以下示例用于检索morphedByMany
关系,这是多对多的多态关系。
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 :(得分:3)
您是否认为使用集合的“union”功能合并所有不同的集合以便检索所需的所有内容?
class Tag extends Model
{
[...]
/**
* Get all of.
*/
public function morphed()
{
return $this->video->union($this->posts)->all();
}
}
答案 1 :(得分:0)
我在这里使用一个把戏:
为连接表Taggable
创建模型taggable
,并为hasMany
模型添加Tag
关系。
public function related()
{
return $this->hasMany(Taggable::class);
}
在您的Taggable
模型中,创建一个morphedTo
关系。
public function taggables()
{
return $this->morphTo();
}
现在,您可以通过调用以下命令获取所有正在使用该标记的模型:
$tagged = Tag::with('related.taggables');
答案 2 :(得分:-2)
您应该可以在Tag类上添加关系
public function taggable()
{
return $this->morphedTo();
}
这将使用taggable_id和taggable_type来获取与之相关的相关模型。