首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel 5 OOP结构/架构建议

laravel 5 OOP结构/架构建议
EN

Stack Overflow用户
提问于 2015-08-12 15:08:20
回答 1查看 1.8K关注 0票数 0

关于如何为在Laravel 5中构建的应用程序实现模型结构的最佳实践,我有一个一般性的问题。

所以,现在我有这样的安排:

用户”模型和表: id、电子邮件、密码、管理级别--这实际上只是身份验证登录的信息。

'user-details‘模型和表: id、userID (用户表id字段的外键)、名称、地址等--所有其他详细信息

课程-类型”模型和表: id,teacherID (用户详细信息表id字段的外键),标签等关于不同类型的课程的信息。

目前,我有一个教师控制器,其中我正在传递到视图:-来自用户表的信息-来自用户-详细信息表的信息-来自课程类型表的教师不同课程类型的列表。

但是,我觉得所有这些都应该与一个单独的User-details教师模型联系在一起,它可以扩展模型(可能还应该扩展用户模型),但是不会有它自己的表,但是所有与用户更新有关的信息-详细信息或教训类型表都会存储在这些相关的表中。这是对的吗?

(我还应该说,用户也可能是父母而不是教师,因此我将为所有与父母相关的属性建立一个单独的父母模型。)

然后,我将只将教师模型对象传递到视图中,从而访问所有教师信息,如个人信息和课程类型数组。

当我打字的时候,这听起来越来越像是正确的方式,但如果能得到一些建议,那就太好了。

技术实现:我想在教师模型中,我会将所有相关的教师填充到构造函数中的类变量(名称、课程数组等)中?

2-有用户和用户详细信息表使这个结构复杂化了吗?

3-我的建议在拉拉维尔最有意义吗?

4.lesson=‘lesson 1’>类表中的teacherID实际上是指用户表而不是用户详细信息表.那么,用户详细信息和课程类型都将是用户表的直接子级吗??

非常感谢的帮助:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-12 15:32:01

除非有明确的继承,否则不应该扩展这样的模型。从逻辑的角度来看,这是没有任何意义的,因为无论如何,您将不得不覆盖User模型上的大部分内容。而您没有覆盖的内容将被错误地映射到数据库,因为它们是两个完全不同的表。你真正想做的是利用雄辩的人际关系。

为了清楚起见,我假设这个基本结构:

代码语言:javascript
复制
users - id
teachers - id, user_id
user_details - id, user_id
lesson_types - id, teacher_id

这些应该是4个完全不同的模型,它们都是使用Model::belongsTo()方法相互关联的。所以Teacher模型应该是

代码语言:javascript
复制
class Teacher extends Model {
    public $table = 'teachers';

    public function user() {
        return $this->belongsTo('App\User');
    }
}

当你查询老师时,你可以做Teacher::with('user')->get()。这将返回teachers表中的所有记录,并且在Teacher模型的每个实例上,您将能够调用$teacher->user并获取与该教师关联的User实例。这是一个完整的模型,而不仅仅是额外的数据,所以您可以访问User模型上的所有内容,这通常是扩展的主要原因。

关于你的问题清单:

  1. 我可能误解了你,但这不是ORM的工作方式。我建议回去阅读那些雄辩的文档(如果你运行5.0,我建议阅读5.1的文档,因为它们要好得多)。
  2. 这将取决于你问谁,但我倾向于这样认为。如果数据明显相关,而且没有理由跨记录类型共享数据(例如,我通常有一个addresses表,所有记录都引用该表,而不是在多个表上重复5个地址字段),那么我认为所有数据都应该放在一个表上。如果您将它放在单独的表中,那么它只会使以后的管理变得更加困难。 有些人会不同意,并认为每个表的范围更小,而且可能允许对非常大的数据集进行更快的查询,但我认为这最终是不值得的。
  3. 不,我已经解释过了
  4. teacher_id列应该引用teachers表,假设课程属于教师,不能只属于系统中的任何用户。使用ORM,您将能够执行$lesson->teacher->user->userDetails来获取数据

我真的认为你需要回去读那些雄辩的医生。你对口才如何发挥作用的理解,以及它是如何被使用的,似乎是非常基本的,而且你忽略了很多更精细的细节。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31969064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档