Laravel 5 Laravel-多对多多态关系

Laravel 5 Laravel-多对多多态关系,laravel-5,eloquent,polymorphism,many-to-many,relationship,Laravel 5,Eloquent,Polymorphism,Many To Many,Relationship,我的头撞到了Laravel 5.7中的多态关系定义上 以下是数据情况: 我有一个用户模型,一个产品模型和一个销售模型 我基本上想为我的用户建立一个愿望列表,它可以包含商品和产品,我想在那里建立一个多态关系,因为我必须在以后添加新类型的东西来销售 在我的(简化的)当前数据模式中,我有 users -email -id products -id -name merchandises -id -name 还有那个臭名昭著的 wish_list_items -user_id -wish_list_

我的头撞到了Laravel 5.7中的多态关系定义上

以下是数据情况: 我有一个用户模型,一个产品模型和一个销售模型 我基本上想为我的用户建立一个愿望列表,它可以包含商品和产品,我想在那里建立一个多态关系,因为我必须在以后添加新类型的东西来销售

在我的(简化的)当前数据模式中,我有

users
-email
-id

products
-id
-name

merchandises
-id
-name
还有那个臭名昭著的

wish_list_items
-user_id
-wish_list_item_type
-wish_list_id
在关系方面(关于用户):

现在这个工作很好。但这还不足以实现我想要实现的目标——我缺少的是获取愿望列表中所有项目的步骤,不管它们的类型如何。目前:

public function wishListAll()
{
    return $this->load(['wishListProducts','wishListMerchandises']);
}
这显然给了我一个所有东西的列表,但是在不同的集合中-我想要一个统一的

第一个问题,是否有一种方法可以获取与该用户关联的所有内容,而不考虑其类型?这可能很简单,但我在任何地方都找不到

如果这是不可能的(我确实怀疑这一点,但这意味着这些多态关系只不过是避免创建另一个透视表的一种方法,我不介意这样做),人们认为什么是最好的方法? 最初的想法是创建一个接口,我的所有sellables模型都将实现该接口,以便统一所有内容——尽管如此,我仍然必须循环遍历所有分离的集合,除非在它们实现相同的接口时有一种简单的方法来合并它们? 或者我应该为我的WishListItems定义一个模型(目前它是一个透视表,所以模型还没有定义),将我所有的可销售模型和超级模型联系起来,并尝试将关系联系在一起

谢谢你的意见

默认解决方案是合并两个(或更多)集合的访问器:

公共函数getWishListItemsAttribute()
{
返回$this->wishListProducts->toBase()->merge($this->wishListMerchandises);
}
//$user->wishListItems
+++更新+++


我已经创建了一个用于使用视图合并关系的包:

首先,在迁移中创建合并视图:

使用staudenmir\LaravelMergedRelations\Facades\Schema;
架构::createMergeView(
'愿望清单项目',[(新用户)->wishListMerchandises(),(新用户)->wishListProducts()]
);
然后定义关系:

类用户扩展模型
{
使用\Staudenmeir\LaravelMergedRelations\elount\HasMergedRelationships;
公共职能部门愿望清单()
{
返回$this->mergedRelation('wish_list_items');
}
}
像其他关系一样使用它:

$user->wishListItems;
$user->wishListItems()->paginate();
User::with('wishListItems')->get();

这就成功了。现在,如果我的模型实现了相同的接口,我就有了一个统一的集合,可以通过我的业务流程传递。谢谢!我创建了一个用于合并关系的包,并将其添加到我的答案中。
public function wishListAll()
{
    return $this->load(['wishListProducts','wishListMerchandises']);
}