Laravel Eloquent ORM 与 Query builder 哪个更好?

Posted

技术标签:

【中文标题】Laravel Eloquent ORM 与 Query builder 哪个更好?【英文标题】:Laravel Eloquent ORM vs Query builder which one better? 【发布时间】:2018-08-12 19:12:58 【问题描述】:

谁能告诉我 ORM 或查询生成器哪个更好?它有好处吗?

【问题讨论】:

Laravel Eloquent vs query builder - Why use eloquent to decrease performance的可能重复 【参考方案1】:

我们使用 Laravel 之类的框架来简化我们的工作。当谈到框架的概念时,开发的速度和易用性比性能更重要。因此,通过使用 ORM,它提供了强大的方法来处理数据库,而无需大量的 mysql 知识。在查询构建器的情况下,它提供了以有效方式构建查询的方法。

根据我的经验,有些事情我们不能用 Eloquent 轻松完成。因此,我们需要使用查询构建器来构建直接查询。

所以我认为将 Eloquent 和查询生成器进行比较并不好。

您可以找到更多详细信息here。

但我可以给你一些提示来选择一种方法。

如果您更注重效率而不是开发的难易程度, 使用查询生成器。 如果您与一个实体打交道,请选择 ORM,(Eloquent)。 如果您处理多个实体,最好处理查询 建设者。 如果您是 mysql 新手或者您的应用程序不是很复杂, 绝对选择 ORM。 如果您需要更复杂的查询,我建议使用查询生成器。

【讨论】:

【参考方案2】:

ORM

以 OOP 方式为您提供一个不错的 API 您可以轻松处理人际关系 还可以处理Polymorphic RelationshipsQuery Builder中没有提供 您不必担心联接。 您可以使用更少的代码做更多事情。 您可以使用 mutators 和 setter 来节省大量时间 在测试中您可以轻松地模拟对象。 您可以转换列的类型。

希望这些就足够了

【讨论】:

但我想知道它会减慢我的代码速度?我想说的是,当我从数据库中返回数据时,需要时间来响应。 @KaziBablu Yess ORM 很慢,但如果它可以节省开发时间,您可以使用它。 如果我开发大型应用程序,那么 ORM 更好或查询构建器哪个更好? @laravel levaral 37 @KaziBablu ORM 在速度方面还有许多其他优势。但如果它真的是一个任务关键型应用程序,你甚至可以跳过与核心 php 相关的缓慢的 Laravel 感谢您的建议。【参考方案3】:

是的,在某些情况下你是对的。当我们拥有更多数据并且几乎在每个站点中时,数据确实不小。那么使用 DB Query 比使用 Eloquent Query 更好。

在 Eloquent VS DB 的性能问题中,我听说过,

为一个简单的表插入 1000 行 Eloquent 需要 1.2 秒,在这种情况下,数据库外观只需要 800 毫秒(毫秒)。

那为什么是 Eloquent 呢?没有必要吗?

答案是 - 雄辩也是必要的。原因-

当需要加入时,用如此简单的语法创建更好的关系并在视图中显示结果。

Eloquent 也适用于对 SQL 查询了解不多的人。

一个 MVC 框架遵循代码可读性、代码可维护性以及 Eloquent 的规则,你知道的。下面是代码比较。显然,Eloquent 更适合阅读。

// In Eloquent
$student = App\Student::find($id);

// In DB facade
$student = DB::table('student')->where('id', $id)->first();

最重要的部分是如果我们想更改其他数据库,那么原始查询会让我们非常头疼,在这种情况下,Laravel Eloquent 会用一只手解决所有问题。它可以处理不同类型的数据库。

所以当我们使用 Eloquent 和 When DB 门面时:

当我们使用简单的 CRUD 在一个简单的小型记录站点上工作并且记录不是事实时,请在那里使用 Eloquent。 当我们要处理大量记录时,使用 DB Query 比使用 Eloquent 更好。 所以,最后要明确的是——我们什么时候使用数据库查询,什么时候使用 Eloquent 查询。

编辑 - 现实生活中的例子

我正在制作一个大学网站。最多可包含 5,000 个 教师和 10,000 名学生以及一些通知和文件。然后就是 最好使用简单的 Laravel Eloquent 来做到这一点,这非常 标准且可读。

现在我正在制作一个类似 *** 的网站。其中可能包含超过 1,000,0000 (1 千万) 个帖子和更多内容。我会必须选择 那里的传统 DB 外墙。搜索速度更快 来自这么多记录的帖子。

您可以使用 Laravel Debugbar(检查 Eloquent/数据库查询性能/执行时间的流行包)检查您的查询性能

现在是你的选择。你想做什么...

【讨论】:

以上是关于Laravel Eloquent ORM 与 Query builder 哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章

Angular JS 与 Laravel - 如何绑定 Eloquent ORM 数组以查看

Laravel Eloquent ORM 关系命名约定

将 Laravel 5 Eloquent 模型移动到它自己的目录中

laravel Eloquent ORM 多表插入

Laravel Eloquent ORM 的本地作用域

Laravel Eloquent ORM - 获取第一和第三表数据