Laravel 数据结构
Laravel Data Structure
想知道在以下情况下我是否可以得到您的thoughts/experience?如果我可以澄清以下任何信息,请告诉我。
问题
我需要与用户和公司进行交互、检索、filter/sort 并分页到集成的 html table 中。
关系结构:user
hasMany()
company
和company
belongsTo()
user
。
说明:只有user
可以登录,company
不能登录
可能的解决方案(如我所见)
多态性
使用 networkable
model/table,通过称为 [=112= 的 morphTo()
关系将 users
和 companies
table 关联起来].合并的 table 的检索将通过 Networkable::with('displayable')->get()
.
完成
加号
1) 数据库保持 users
和 companies
.
的清晰分离
取舍
1) 每次 user
或 company
为 created/deleted
时都需要维护关系
2) 使典型的 eloquent 函数复杂化,因为 user
和 company
详细信息将通过关系或远距离关系检索
单身Table
将 companies
存储在 users
table 中并将它们视为不同的实体,即使它们存储在相同的 table.
中
加号
1) 过滤会很自然,而且可能会更快,因为我们将处理单个 table 和最少的复杂连接。
取舍
1) 通过在 users
table 中添加额外的列来打破 Second Normal Form,仅对 "company" 类型的用户可用。
2) 并非 users
table 中的所有记录实际上都是用户。令人困惑?是的。 users
table 中的某些记录将是 companies
,其列信息与 users
不同。 companies
可能有一个名为 is_company
的布尔值或类似的东西来区分 company
记录和 user
记录。
3) 需要将 user
连接到 users
table 本身的关系。这样用户就可以 "own" a company
.
4) 需要限制以 company
身份登录,因为这不是 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);
想知道在以下情况下我是否可以得到您的thoughts/experience?如果我可以澄清以下任何信息,请告诉我。
问题
我需要与用户和公司进行交互、检索、filter/sort 并分页到集成的 html table 中。
关系结构:user
hasMany()
company
和company
belongsTo()
user
。
说明:只有user
可以登录,company
不能登录
可能的解决方案(如我所见)
多态性
使用 networkable
model/table,通过称为 [=112= 的 morphTo()
关系将 users
和 companies
table 关联起来].合并的 table 的检索将通过 Networkable::with('displayable')->get()
.
加号
1) 数据库保持 users
和 companies
.
取舍
1) 每次 user
或 company
为 created/deleted
2) 使典型的 eloquent 函数复杂化,因为 user
和 company
详细信息将通过关系或远距离关系检索
单身Table
将 companies
存储在 users
table 中并将它们视为不同的实体,即使它们存储在相同的 table.
加号
1) 过滤会很自然,而且可能会更快,因为我们将处理单个 table 和最少的复杂连接。
取舍
1) 通过在 users
table 中添加额外的列来打破 Second Normal Form,仅对 "company" 类型的用户可用。
2) 并非 users
table 中的所有记录实际上都是用户。令人困惑?是的。 users
table 中的某些记录将是 companies
,其列信息与 users
不同。 companies
可能有一个名为 is_company
的布尔值或类似的东西来区分 company
记录和 user
记录。
3) 需要将 user
连接到 users
table 本身的关系。这样用户就可以 "own" a company
.
4) 需要限制以 company
身份登录,因为这不是 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);