Laravel数据结构

杰西·舒特(Jesse Schutt)

想知道我是否可以对以下情况有您的看法/经验?请让我知道是否可以澄清以下任何信息。

问题

我需要与“用户和公司”进行交互,检索,过滤/排序以及将其分页到一个集成的html表中。

关系结构: user hasMany() companycompany belongsTo() user

说明:只有auser可以登录。Acompany不能登录。


潜在的解决方案(如我所见)

多态性

使用networkable模型/表,通过称为“ displayable()”关系来关联userscompaniesmorphTo()合并表的检索将通过进行Networkable::with('displayable')->get()

加号

1)数据库保持的完全分离userscompanies

权衡取舍

1)每次创建或删除user或时company需要维护关系

2)因为复杂典型口才功能usercompany细节将通过关系或疏远关系被检索


单桌

将它们存储companiesusers表中,并将它们视为不同的实体,即使它们存储在同一表中也是如此。

加号

1)过滤是很自然的,并且可能更快,因为我们将处理单个表和最少的复杂联接。

权衡取舍

1)通过在表中添加额外的列来打破第二范式,该列users仅可用于“公司”类型的用户。

2)并非users表中的所有记录实际上都是用户。令人困惑?是的。users中的某些记录将是companies,这些记录的列信息将不同于userscompanies可能会使用布尔调用is_company或类似名称来区分一条company记录和一条user记录。

3)将需要一个将a联接userusers表本身的关系这样,用户可以“拥有”一个company

4)company由于不是a的意图,因此需要限制登录为a company


你怎么看?这些选择之一比另一个更好吗?我是否缺少其他解决方案?谢谢!


所需的输出

橡胶浆果

就像在https://larachat.slack.com中所说的那样使用SQL UNION和/或SQL VIEW将它们组合在一起并具有一个可查询的视图。

http://www.w3schools.com/sql/sql_union.asp和/或http://www.w3schools.com/sql/sql_view.asp

主要学分归于约瑟夫·西尔伯(Joseph Silber)。

$networkable = DB::table('users')->union(DB::table('companies'))->paginate(10);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章