想知道我是否能在以下情况下获得您的想法/经验?如果我能澄清下面的任何信息,请告诉我。
我需要与用户和公司进行交互,检索,过滤/排序和分页到集成的html表中。
关系结构: user
hasMany()
company
和company
belongsTo()
user
。
澄清:只有user
才能登录。company
无法登录。
使用networkable
模型/表,通过名为" displayable()"的users
关系将companies
和morphTo()
表关联起来。合并表的检索将通过Networkable::with('displayable')->get()
完成。
加号
1)数据库保持users
和companies
的清晰分离。
权衡
1)每次创建/删除user
或company
时都需要维护关系
2)使典型的雄辩函数变得复杂,因为user
和company
细节将通过关系或远距离关系来检索
将companies
存储在users
表中,并将它们视为不同的实体,即使它们存储在同一个表中。
加号
1)过滤将非常自然,并且可能更快,因为我们将处理单个表,并且最小化复杂的连接。
权衡
1)通过在users
表格中添加额外的列来打破Second Normal Form,仅可用于"公司"用户类型。
2)并非users
表中的所有记录都是用户。混乱?是。 users
表中的某些记录为companies
,其列信息与users
不同。 companies
可能会有一个名为is_company
的布尔值或类似内容,以区分company
记录和user
记录。
3)需要将user
加入users
表本身的关系。这样一来,用户就可以拥有" company
。
4)需要限制以company
登录,因为这不是company
的意图。
答案 0 :(得分:0)
就像在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);