【发布时间】:2014-11-10 01:10:09
【问题描述】:
我正在 Laravel 中构建一个应用程序,利用 Eloquent ORM 访问本地数据。
此应用程序的部分功能涉及在远程数据库上运行复杂的查询。有一些固定查询需要运行。我可以创建 Eloquent ORM 来像本地基于表的模型一样访问查询数据吗?
我的意思是,为了方便起见,我想将查询视为 ORM 模型中的表,而在模型中,查询正在远程数据库上运行以获取数据。这些将是只读模型。
或者我最好(通过努力 POV)运行一个雄辩的 SQL 查询并直接获取数据,而不是尝试将其包装成更抽象的模型?我只是不知道我的方法会与 eloquent 的技术设计目标作斗争。
编辑:我宁愿不在远程数据库上创建视图来完成查询,尽管乍一看这似乎是个好主意。
【问题讨论】:
-
如何访问远程数据库?
-
Laravel 允许设置多个数据库驱动程序和身份验证详细信息。雄辩的模型可以被告知使用该列表中的特定数据库。
-
本质上它只是一个“数据库”,所以与本地数据库相比,远程数据库没有什么特别之处,除了我无法开始在远程数据库上创建对象 - 将其视为读取 -仅限。
-
好的,谢谢 Jason,我只是确保您正在这样做。当然,您可以只使用 Eloquent,模型可以具有运行特定查询的作用域方法(请查看 Eloquent 文档)。如果安全是您的主要目标,您是否研究过远程存储过程?
-
阅读上下文,我会做这样的事情:创建一个引用远程数据库的单一模型,然后为每个查询创建上下文?例如
MyRemote::query1()->get()和MyRemote::query2()->where('timestamp', '<', 'now()')->take(5)?上下文函数(query1 和 query2)将构建基本查询,但我怀疑我需要覆盖where()之类的函数,以便条件可以针对复杂查询的正确部分。