从 Orator 迁移到 Masonite ORM
Orator 到 Masonite ORM
Orator 到 Masonite ORM 指南
本指南将解释如何从 Orator 迁移到 Masonite ORM。 Masonite ORM 几乎是 Orator 的直接端口,但允许 Masonite 组织完全创造性地控制 ORM。
Orator 已被放弃,Masonite 需要一个好的 ORM 来保持 ORM 的最新功能和安全性。
在将您的项目转移到 Masonite ORM 之前,请记住某些功能不是 (_至少目前)_ 从 Orator 移植过来的。这些是将来可能移植的功能。
此列表是一个不断发展的功能列表,我们开发的任何内容都将从列表中删除。这些功能已计划但尚未完成。
目前这些功能是:
- 有一个直通关系
如果您使用的是 Masonite 2,那么由于 Masonite 和 Masonite 2 ORM 之间的版本冲突,您将无法升级到 Masonite ORM。
配置
Orator 和 Masonite ORM 之间的配置字典是相同的。唯一的区别是 Masonite ORM 需要config/database.py
文件,而 Orator 是可选的,需要在命令等多个位置显式指定。
如果您已经来自 Masonite,请不要担心,该文件已经存在。如果没有,您将需要创建这个config/database.py
文件。
这是 Masonite ORM 配置字典的示例:
import os
DATABASES = {
'default': 'mysql',
'mysql': {
'driver': 'mysql',
'host': os.getenv('MYSQL_DATABASE_HOST'),
'user': os.getenv('MYSQL_DATABASE_USER'),
'password': os.getenv('MYSQL_DATABASE_PASSWORD'),
'database': os.getenv('MYSQL_DATABASE_DATABASE'),
'port': os.getenv('MYSQL_DATABASE_PORT'),
'prefix': '',
'options': {
'charset': 'utf8mb4',
},
'log_queries': True
},
'postgres': {
'driver': 'postgres',
'host': os.getenv('POSTGRES_DATABASE_HOST'),
'user': os.getenv('POSTGRES_DATABASE_USER'),
'password': os.getenv('POSTGRES_DATABASE_PASSWORD'),
'database': os.getenv('POSTGRES_DATABASE_DATABASE'),
'port': os.getenv('POSTGRES_DATABASE_PORT'),
'prefix': '',
'log_queries': True
},
'sqlite': {
'driver': 'sqlite',
'database': 'orm.sqlite3',
'prefix': '',
'log_queries': True
},
'mssql': {
'driver': 'mssql',
'host': os.getenv('MSSQL_DATABASE_HOST'),
'user': os.getenv('MSSQL_DATABASE_USER'),
'password': os.getenv('MSSQL_DATABASE_PASSWORD'),
'database': os.getenv('MSSQL_DATABASE_DATABASE'),
'port': os.getenv('MSSQL_DATABASE_PORT'),
'prefix': '',
'log_queries': True
},
}
您需要做的另一件事是更改解析器类。 Orator 的配置结构如下:
from orator import DatabaseManager, Model
DATABASES = {
# ...
}
DB = DatabaseManager(DATABASES)
Model.set_connection_resolver(DB)
Masonite ORM 那些相同的解析器类如下所示:
from masoniteorm.connections import ConnectionResolver
DATABASES = {
# ...
}
DB = ConnectionResolver().set_connection_details(DATABASES)
模型
模型是相同的,但是导入是不同的。Orator 要求您从配置文件中设置模型解析器,然后导入该模型。
在 Masonite ORM 中,您可以直接导入模型:
# Masonite
from masoniteorm.models import Model
class User(Model):
pass
Scopes
这里注意 scope 的导入,也是不一样的
# Orator
from orator.orm import scope
class User(Model):
@scope
def popular(self, query):
return query.where('votes', '>', 100)
# Masonite
from masoniteorm.scopes import scope
class User(Model):
@scope
def popular(self, query):
return query.where('votes', '>', 100)
获取构建器关系
在 Orator 中,您可以这样做:
user = User.find(1)
user.phone().where('active', 1).get()
这将延迟关系调用,而是在返回结果之前附加构建器。
Masonite ORM 中的上述调用变为:
user = User.find(1)
user.related('phone').where('active', 1).get()
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。