首页 > 解决方案 > 为什么 Laravel 将表创建(迁移)和模型分开?

问题描述

我是框架的新手,也是 ORM 概念的新手。如果 Eloquent 将一个类映射到一个 DB 表,表设计不应该也由该类处理吗?

例如,我想创建一个具有和属性的Person类(或者Model,准确地说是 ) 。我必须先创建一个表,在迁移文件中声明 2 个字段,迁移它,然后才能创建模型。我可以使用“-mr”一次创建所有内容,但这不是我要寻找的答案。nameagepersonsPerson

在我看来,自然的方式是创建一个Person类,Laravel 会自动为它创建一个表,然后将它们映射在一起。为什么 Laravel 不是这样设计的?

另一个例子可能是 SQLAlchemy。在这个介绍页面中,SQLAlchemy 还声称“分离映射和类设计”是一个优势特性。

标签: laraveleloquentorm

解决方案


我要给你的可能是一个轶事证据,但它帮助我理解了为什么会有分离。

早些时候,我做过一个项目,其中有两种类型的用户都驻留在“用户”表中。一种是客户;另一种类型是工人。他们两人的数据非常相似,例如姓名、地址、电子邮件等。

因为我只有一张表,所以只有一个迁移文件。但是有两种不同的模型。一个给客户,另一个给工人。

尽管它们的数据相似,但它们的功能却大不相同。客户无法被雇用。因此,在客户模型(或用户模型)中编写 get_hired() 函数会很愚蠢。它属于工人模型。它使代码更易于管理。

因此,模型和迁移的分离在这方面有所帮助。迁移将让您使用表结构,但模型让您使用实际数据。因此,它有助于制作更易于管理的代码。

从技术上讲,您可以在一个 PHP 文件中编写每一段逻辑。但是很难管理它。同样的逻辑也适用于此。


推荐阅读