在我的 Laravel 应用中,我有 User、List 和 ListItem 模型,User 和 List 之间是一对多关系,User 和 ListItem 之间以及 List 和 ListItem 之间是多对多关系。每个 User 应该能够分别标记每个 List 上的 ListItem,以便 ListItem 1 在 List A 和 List B 上可以具有不同的标签。我的 lists_listitems 数据透视表有一个列“tags”,但我不知道如何在关系上定义标签模型。
我曾想过通过创建与 ListItems 具有多对多关系的标签模型来简化问题,但由于所有用户都可以访问数据库中的所有 ListItems,因此 ListItem 的标签将对所有用户可见。如果我尝试使标签仅对一个用户可见,我会遇到同样的问题(仅针对 listitems_user 数据透视表而不是 lists_listitmes 数据透视表)。我搜索了文档和网络,但没有得到任何有用的结果,这可能是因为标签是多对多关系的一个非常常见的示例,而没有我的应用程序所需的额外复杂性。在 Laravel 中标记关系是否可行?
我将创建一个额外的标签模型,以便实体将是标签、用户、列表、列表项,其中一个枢轴 list_item_user_tags。
我会保留用户表的原样,然后是 标签表- id、name、user_id(因此标签是特定于用户的); 列表表- id、name; list_items 表- id、name;list_item_user_tags 表- id、list_id、list_item_id、tag_id、user_id。
如果在您考虑的系统中,标签是固定的并且可以定义为
Enums
,我建议您考虑一个表,其列为user_id, list_id, list_item_id
,tag
列的内容为Enum
。通过这项工作,每次访问列表数组或项目列表时,您都可以轻松地在关系中为标签找到一个枢轴。建议表的关系代码如下:但是如果标签可以由用户定义,并且每个用户都有自己的标签,那么您还应该为标签定义一个模型。并且在之前提出的表中,使用
id
此标签的而不是枚举。在这种情况下,关系将如下所示: