laravel - 为什么 Laravel 将表创建(迁移)和模型分开?
问题描述
我是框架的新手,也是 ORM 概念的新手。如果 Eloquent 将一个类映射到一个 DB 表,表设计不应该也由该类处理吗?
例如,我想创建一个具有和属性的Person
类(或者Model
,准确地说是 ) 。我必须先创建一个表,在迁移文件中声明 2 个字段,迁移它,然后才能创建模型。我可以使用“-mr”一次创建所有内容,但这不是我要寻找的答案。name
age
persons
Person
在我看来,自然的方式是创建一个Person
类,Laravel 会自动为它创建一个表,然后将它们映射在一起。为什么 Laravel 不是这样设计的?
另一个例子可能是 SQLAlchemy。在这个介绍页面中,SQLAlchemy 还声称“分离映射和类设计”是一个优势特性。
解决方案
我要给你的可能是一个轶事证据,但它帮助我理解了为什么会有分离。
早些时候,我做过一个项目,其中有两种类型的用户都驻留在“用户”表中。一种是客户;另一种类型是工人。他们两人的数据非常相似,例如姓名、地址、电子邮件等。
因为我只有一张表,所以只有一个迁移文件。但是有两种不同的模型。一个给客户,另一个给工人。
尽管它们的数据相似,但它们的功能却大不相同。客户无法被雇用。因此,在客户模型(或用户模型)中编写 get_hired() 函数会很愚蠢。它属于工人模型。它使代码更易于管理。
因此,模型和迁移的分离在这方面有所帮助。迁移将让您使用表结构,但模型让您使用实际数据。因此,它有助于制作更易于管理的代码。
从技术上讲,您可以在一个 PHP 文件中编写每一段逻辑。但是很难管理它。同样的逻辑也适用于此。
推荐阅读
- javascript - TextGeometry 未显示
- android - 当我将网络从一个 wifi(W1) 切换到另一个 wifi(W2) 时,Volley 无法正常工作
- maven - Maven 构建成功虽然 npm 部署有错误
- java - 使用按钮和鼠标侦听器移动图形对象
- python - 输出未正确显示
- php - PHP / Laravel - 有条件地显示刀片视图
- sql - 如何构建我的数据以在一张表中预聚合不同的天数/月数/年数?
- android - android studio - 我想改变圆形按钮的背景颜色
- sql - 如何删除值的第一个字母并根据第一个字母更改值
- java - Java spring - 从拦截的异常中获取原始请求对象