什么是 ORM? Eloquent ORM?

What is an ORM? Eloquent ORM?

我是 OOP 编程的新手。但我想我明白什么是 ORM:在实践中,ORM 库允许在对象中抽象数据库并将其处理为 OOP 编程中的 class。

我说的对吗? Eloquent 是在 Laravel 中管理 ORM 的库,要使用它必须扩展模型(MVC 架构中软件的业务逻辑)

在 laravel.com HERE

查看文档

tl;dr:ORM 管理将数据库中基于简单整数的关系转换为您可以在代码中使用的 classes 的实例。

您在几个不同的领域感到困惑。

首先,很快,MVC 是应用程序的一层;具体来说,它是表示层的一部分。您的业​​务逻辑应该完全独立于 MVC 层。

像 MySQL 和 PostgreSQL 这样的 RDBMS 在建立和维护面向对象编程的基础的各种关系方面天生就很糟糕。在 classic 博客示例中,您的 Post 属于 User,用户可能有多个帖子。如果我们试图递归地序列化这些对象并存储它们,我们最终会遇到很多循环(因此是无限的)循环。

相反,我们使用索引和键系统在数据库中永久记录一些其他相关对象。这些可能引用 table,但不表示将以编程方式建立的具体关系。

那么我们就有了 ORM。 ORM 通过 Eloquent 中的外键和关系方法知道帖子 table 中一行的 user_id 列实际上与用户对象相关。一旦您添加了关系(见下文),这种情况就会在幕后发生,这样您就可以随时引用该用户,只要该用户存在,而无需使用数据库,甚至不必意识到底层数据不存在已经是对象了。

我们可能会在 Post.php 中看到以下内容:

public function user() {
  return $this->belongsTo(User::class);
}

如果我们的 user_id 为 5,Eloquent 会使用一点语法魔法(具体来说,小蛇案例 class 并附加 _id)来查找具有id 为 5。当您通过预加载或延迟加载检索此数据时,eloquent 将使用检索到的数据来合成一个 User 对象。

抽象在于,从技术上讲,class/object 不了解数据库结构,Eloquent 而是处理与 属性 名称和列名称之间的转换。