【问题标题】:What is an ORM? Eloquent ORM? [closed]什么是 ORM?雄辩的ORM? [关闭]
【发布时间】:2015-03-31 01:04:58
【问题描述】:

我是 OOP 编程的新手。但我想我理解什么是 ORM:在实践中,ORM 库允许将数据库抽象为一个对象并像 OOP 编程中的一个类一样处理它。

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

【问题讨论】:

  • 谢谢:在这个网络中存在这样的问题吗? (再见)
  • 嗯,我不确定。 Programmers StackExchange 可能会更好。至少问题的一部分是询问 ORM 是什么。然而,关于什么是 ORM,已经有很多问题和其他资源。例如this

标签: php oop laravel orm


【解决方案1】:

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

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

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

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

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

那么我们就有了 ORM。 ORM 通过 Eloquent 中的外键和关系方法知道,posts 表中一行的 user_id 列实际上与一个 User 对象相关联。一旦您添加了关系(见下文),这就会在后台发生,这样您就可以随时引用该用户,只要该用户存在,而无需使用数据库,甚至不需要知道基础数据不是已经是一个对象了。

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

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

如果我们的 user_id 为 5,Eloquent 会使用一点语法魔法(特别是小写类的大小写并附加 _id)来查找 id 为 5 的用户。当您检索此用户时,可以通过预加载或延迟加载,然后 eloquent 将使用检索到的数据来水合 User 对象。

抽象在于从技术上讲,类/对象不知道数据库结构,Eloquent 而是处理属性名称和列名称之间的转换。

【讨论】:

  • MVC 更恰当地说是具有一些光耦合的三层:模型层(正如 OP 所说,通常是业务逻辑所在的位置)、控制器层和视图层。只有 MVC 中的 V 是“表示层”。 Web 框架可能会稍微复杂一些,因为在客户端和服务器端都可以有多个控制器和视图,但无论哪种方式,将 MVC 视为一层都是不正确的。
【解决方案2】:

在 laravel.com HERE查看文档

【讨论】:

  • 有时,如果您从其他人或专业人士那里学到了什么,这是一个很好的做法。没有人有机会当老师
  • 请提供解决方案并尝试回答如何以及为什么部分。
猜你喜欢
  • 2014-06-22
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 2016-08-27
相关资源
最近更新 更多