我应该避免在 Laravel 项目中使用数据库视图吗?

Posted

技术标签:

【中文标题】我应该避免在 Laravel 项目中使用数据库视图吗?【英文标题】:Should I avoid using database views in Laravel projects? 【发布时间】:2015-09-07 11:10:31 【问题描述】:

mysql 中维护数据库视图有时很麻烦。当您更改引用的表时,您必须更改表,并且在迁移中没有干净的方法来做到这一点 (DB::unprepared())。我想在模型中使用query scopes 更易于维护。不是吗?是否对性能有负面影响。

【问题讨论】:

这里有很多事情需要考虑,所以我认为没有任何真正的建议可以涵盖您可能从事的任何未来项目。查询范围在 Laravel 应用程序的上下文中可能更易于维护,但它们并不完全等同于视图,这使得这种比较有点奇怪。在某些情况下,视图可以具有更好的性能,但这取决于您使用的数据库系统。所以最重要的是,您应该使用最适合该特定项目的任何东西。在性能至关重要的情况下,完美的可维护性可能会受到一些打击。 我同意 Bogdan 关于查询范围的观点。它们是完全不同的东西...... 【参考方案1】:

我不知道你的项目有多大,而且我没有多少要素可以完美地判断这种情况。

但是,使用视图意味着依赖于底层数据库系统。显然它有其优点和缺点,但我更愿意解耦我的软件组件。

如果你将来改变,从 MySQL 切换到 MongoDB

也许,您可以使用缓存系统,例如 Redis 或 Memcached(Laravel已经有一个现成的服务)。

正如我之前告诉你的,我提出这个建议主要是因为我考虑到软件可扩展性和组件解耦。

这里可以了解缓存服务的基本使用:http://laravel.com/docs/5.1/cache

此外,如果您对设计模式有信心,您可以使用一些堆叠存储库以及装饰器模式来实现一个非常优雅的解决方案。

您可以在此处找到有关该主题的一些有趣文章:

http://culttt.com/2014/02/03/laravel-4-cache-service/ http://culttt.com/2014/04/23/decorator-pattern/

是的,它们是关于 Laravel 4 的,但这个概念很容易在 Laravel 5.* 项目中采用。

希望有用!

编辑:正如我在以下 cmets 中所说,如果您不想从 Redis 或 Memcached 之类的东西开始,您可以随时使用 基于文件系统的缓存。

【讨论】:

我同意了。然而,扮演魔鬼的拥护者 - 多久更换一次他们的数据库系统?有时最好以允许您编写您今天需要的 api 的方式使用可用的工具,而不是考虑将来可能永远不会发生的变化。 我部分同意你的看法。你说的是对的,但在我的生活中,我见过很多情况,多花几个小时可能会极大地改变一切。此外,如果您喜欢缓存服务的想法,您可以随时使用基于文件系统的服务。它可以是一个很好的启动器,它不需要任何配置! :)

以上是关于我应该避免在 Laravel 项目中使用数据库视图吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Zend Guard 编码的 Laravel 在浏览器中显示刀片视图文本

Laravel 5 - 我应该在哪里编写这个函数,以及如何编写?

如何避免 laravel 中的嵌套形式?

如何避免在 laravel 4 中使用 php composer dump-autoload?

避免将重复项添加到 listview android

Laravel 4 - 如何在视图中访问 MySQL 数据库