Laravel 数据结构

Laravel Data Structure

想知道在以下情况下我是否可以得到您的thoughts/experience?如果我可以澄清以下任何信息,请告诉我。

问题

我需要与用户和公司进行交互、检索、filter/sort 并分页到集成的 html table 中。

关系结构:userhasMany()companycompanybelongsTo()user

说明:只有user可以登录,company不能登录


可能的解决方案(如我所见)

多态性

使用 networkable model/table,通过称为 [=112= 的 morphTo() 关系将 userscompanies table 关联起来].合并的 table 的检索将通过 Networkable::with('displayable')->get().

完成

加号

1) 数据库保持 userscompanies.

的清晰分离

取舍

1) 每次 usercompany 为 created/deleted

时都需要维护关系

2) 使典型的 eloquent 函数复杂化,因为 usercompany 详细信息将通过关系或远距离关系检索


单身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);