什么是ORM?Eloquent ORM是什么?

5

我是一个新手,对面向对象编程还不太熟悉。但我认为我理解了什么是ORM:实际上,ORM库允许将数据库抽象成一个对象,并像在面向对象编程中处理类一样进行处理。

我的理解正确吗?Eloquent是Laravel中管理ORM的库,使用它需要扩展模型(在MVC架构中表示软件的业务逻辑)。


谢谢:这个网络里有没有专门针对这类问题的部分?(新手) - Seojudo
1
嗯,我不确定。也许最好去程序员StackExchange。至少问题中询问ORM是什么部分可以在那里得到更好的回答。然而,已经有很多关于ORM的问题和其他资源了。例如这个 - lukasgeiter
2个回答

9
简化版:ORM是将数据库中的简单整数关系转换为您可以在代码中使用的类实例的管理器。RDBMSs(如MySQL和PostgreSQL)本质上不擅长建立和维护面向对象编程所需的各种关系。相反,我们使用索引和键的系统来在数据库中做出有关其他相关对象的永久记录。ORM通过外键和关系方法知道user_id列实际上与User对象相关联。这发生在添加关系后,在不必意识到底层数据不是对象的情况下,您可以随时引用此用户。
完整版:ORM是将数据库中的简单整数关系转换为您可以在代码中使用的类实例的管理器。您可能在几个不同的区域感到困惑。首先,MVC是应用程序的一层;具体而言,它是演示层的一部分。您的业务逻辑应完全独立于MVC层。像MySQL和PostgreSQL这样的关系型数据库管理系统在建立和维护面向对象编程所需的各种关系方面本质上很差。在经典博客示例中,您的“帖子”属于一个“用户”,该用户可能有多篇文章。如果我们试图仅递归序列化这些对象并存储它们,我们将得到许多循环(因此无限)循环。相反,我们使用索引和键的系统来在数据库中做出有关其他相关对象的永久记录。这些可能引用一个表,但不代表将在程序上建立的具体关系。然后我们有ORM。ORM通过外键和Eloquent中的关系方法知道user_id列中的行实际上与User对象相关联。一旦添加了关系(请参见下文),就会在幕后发生这种情况,以便您可以随时引用此用户,只要该用户存在,而无需使用数据库甚至意识到底层数据不是对象。在“Post.php”中,我们可能会看到以下内容:
public function user() {
  return $this->belongsTo(User::class);
}

如果我们有一个用户ID为5,Eloquent会使用一些语法技巧(具体来说,将类名转换为小写蛇形并添加_id)来查找ID为5的用户。当您通过急切加载或惰性加载检索此数据时,Eloquent将使用检索到的数据来填充一个对象。
抽象化在于,从技术上讲,类/对象不知道数据库结构,而是Eloquent处理属性名称和列名称之间的转换。

2
MVC 更准确地说是三层,其中有些轻度耦合:模型层(通常是业务逻辑所在的地方,正如 OP 所述),控制器层和视图层。只有 V 是 MVC 中的“表示层”。Web 框架可能会更加复杂,因为客户端和服务器端都可能有多个控制器和视图,但无论如何,把 MVC 视为一层是不正确的。 - alttag

-1

请查看laravel.com的文档 这里


3
有时候,了解自己从其他人或专业人士那里学到的知识是一个好习惯。并不是每个人都有机会拥有一位老师。 - Seojudo
请提供解决方案并尝试回答如何以及为什么的部分。 - darth vader

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接