Laravel 将两个多态关系结果放在一起

Laravel 将两个多态关系结果放在一起,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,-如果我有这种多对多多态关系: class Tag extends Eloquent { public function posts() { return $this->morphedByMany('Post', 'taggable'); } public function videos() { return $this->morphedByMany('Video', 'taggable'); }

-如果我有这种多对多多态关系:

class Tag extends Eloquent {

    public function posts()
    {
        return $this->morphedByMany('Post', 'taggable');
    }

    public function videos()
    {
        return $this->morphedByMany('Video', 'taggable');
    }

}
所以我可以这样做:

$tag = Tag::find(1);
$posts = $tag->posts;
$videos = $tag->videos;
如何将所有标记关系作为一个结果?i、 e.在一对多多态关系中,您可以这样做:

$tag = Tag::find(1);
$taggable = $tag->taggable;
但在多对多关系中,这似乎不适用于我-我得到以下SQL错误:

SQLSTATE[42S22]:未找到列:1054未知列“标记组” 在“where子句”(SQL:select*from
tag\u groups
where)中
标记组
``为空限制1)


您必须自己合并结果:

$taggable = $tag->posts->toBase()->merge($tag->videos);
这将返回
illumb\Support\Collection
的实例


在这种情况下,一个有说服力的集合是没有意义的。

您不能在一个结果中获得所有关系,但您可以使用如下方式急切地加载它们:

$tag = Tag::with(['posts', 'videos'])->find(1);
$relations = $tag->getRelations();
$posts = $relations['posts']; // Collection of Post models
$videos = $relations['videos']; // Collection of Video models
在这里,
$tag->getRelations()
将返回一个已加载关系的数组,因此您可以使用如下方式访问其中一个:

$tag = Tag::with(['posts', 'videos'])->find(1);
$relations = $tag->getRelations();
$posts = $relations['posts']; // Collection of Post models
$videos = $relations['videos']; // Collection of Video models
您可以像这样合并它们:

$allRelations = array_merge($posts->toArray(), $videos->toArray());
或者使用
lighting\Support\Collection
merge
方法(如
Joseph Silber
所述)


你认为会有什么结果?有说服力的收集不是一条路要走,因为你可以有钥匙的副本。