$ pip install masonite-orm# config/database.py
DATABASES = {
"default": "mysql",
"mysql": {
"host": "127.0.0.1",
"driver": "mysql",
"database": "masonite",
"user": "root",
"password": "",
"port": 3306,
"log_queries": False,
"options": {
#
}
},
"postgres": {
"host": "127.0.0.1",
"driver": "postgres",
"database": "masonite",
"user": "root",
"password": "",
"port": 5432,
"log_queries": False,
"options": {
#
}
},
"sqlite": {
"driver": "sqlite",
"database": "masonite.sqlite3",
}
}# config/database.py
from masoniteorm.connections import ConnectionResolver
DATABASES = {
# ...
}
DB = ConnectionResolver().set_connection_details(DATABASES)"mssql": {
"host": "127.0.0.1",
"driver": "mssql",
"database": "masonite",
"user": "root",
"password": "",
"port": 1433,
"log_queries": False,
"options": {
"trusted_connection": "Yes",
"integrated_security": "sspi",
"instance": "SQLExpress",
"authentication": "ActiveDirectoryPassword",
"driver": "ODBC Driver 17 for SQL Server",
"connection_timeout": 15,
}
},from config.database import DB
DB.begin_transaction()
User.create({..})DB.commit()
DB.rollback()DB.begin_transaction("staging")
DB.commit("staging")
DB.rollback("staging")with DB.transaction():
User.create({..})logger = logging.getLogger('masoniteorm.connection.queries')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
logger.addHandler(handler)logger = logging.getLogger('masoniteorm.connection.queries')
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
file_handler = logging.FileHandler('queries.log')
logger.addHandler(handler)
logger.addHandler(file_handler)from config.database import DB
result = DB.statement("select * from users where users.active = 1")from config.database import DB
result = DB.statement("select * from users where users.active = '?'", [1])from config.database import DB
result = DB.statement("select * from users where users.active = '?'", [1], connection="production")$ masonite-orm seed Userfrom masoniteorm.seeds import Seeder
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
passfrom masoniteorm.seeds import Seeder
from models import User
class UserTableSeeder(Seeder):
def run(self):
"""Run the database seeds."""
User.create({
"username": "Joe",
"email": "[email protected]",
"password": "secret"
})$ masonite-orm seed:run User# config/factories.py
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}# config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
Factory.register(User, user_factory)# config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
def admin_user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret',
'is_admin': 1
}
Factory.register(User, user_factory)
Factory.register(User, admin_user_factory, name="admin_users")from config.factories import Factory
from models import User
users = Factory(User, 50).create() #== <masoniteorm.collections.Collection object>
user = Factory(User).create() #== <models.User object>from config.factories import Factory
from models import User
users = Factory(User, 50).make() #== <masoniteorm.collections.Collection object>
user = Factory(User).make() #== <models.User object>from config.factories import Factory
from models import User
users = Factory(User, 50).create(name="admin_users") #== <masoniteorm.collections.Collection object># config/factories.py
from masoniteorm import Factory
from models import User
def user_factory(self, faker):
return {
'name': faker.name(),
'email': faker.email(),
'password': 'secret'
}
def after_users(self, model, faker):
model.verified = True
Factory.register(User, user_factory)
Factory.after_creating(User, after_users)user = factory(User).create()
user.verified #== Truefrom config.factories import Factory
from models import User
users = Factory(User, 50).create({'email': '[email protected]'}) #== <masoniteorm.collections.Collection object>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
},
}from orator import DatabaseManager, Model
DATABASES = {
# ...
}
DB = DatabaseManager(DATABASES)
Model.set_connection_resolver(DB)from masoniteorm.connections import ConnectionResolver
DATABASES = {
# ...
}
DB = ConnectionResolver().set_connection_details(DATABASES)# Masonite
from masoniteorm.models import Model
class User(Model):
pass# 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)user = User.find(1)
user.phone().where('active', 1).get()user = User.find(1)
user.related('phone').where('active', 1).get()$ masonite-orm migration migration_for_users_table$ masonite-orm migration migration_for_users_table --create users$ masonite-orm migration migration_for_users_table --table usersclass MigrationForUsersTable(Migration):
def up(self):
"""
Run the migrations.
"""
with self.schema.create("users") as table:
table.increments('id')
table.string('username')
table.string('email').unique()
table.string('password')
table.boolean('is_admin')
table.integer('age')
table.timestamps()
def down(self):
"""
Revert the migrations.
"""
self.schema.drop("users")$ masonite-orm migrate:statuspython craft migrate -s$ masonite-orm migrate:refresh$ masonite-orm migrate:refresh --seed$ masonite-orm migrate:refresh --seed CustomTabletable.foreign('local_column').references('other_column').on('other_table')table.foreign('local_column').references('other_column').on('other_table').on_update('set null')table.foreign('local_column', name="foreign_constraint").references('other_column').on('other_table')table.add_foreign('local_column.other_column.other_table', name="foreign_constraint")class MigrationForUsersTable(Migration):
def up(self):
"""
Run the migrations.
"""
with self.schema.table("users") as table:
table.string('email').nullable().change()
with self.schema.table("users") as table:
table.string('email').unique()
def down(self):
"""
Revert the migrations.
"""
passschema.truncate("users")schema.truncate("users", foreign_keys=False)schema.drop_table("users")schema.drop_table_if_exists("users")user = User
user #== <class User>
user.where('id', 1) #== <masonite.orm.Querybuilder object>user.where('id', 1).where('active', 1) #== <masonite.orm.Querybuilder object>user.select('id').where('id', 1).where('active', 1).get() #== <masonite.orm.Collection object>SELECT `id` FROM `users` WHERE `id` = '1' AND `active` = 1SELECT `id` FROM `users` WHERE `id` = '?' AND `active` = '?'(1,1)SELECT * FROM `users` where `age` = '18'SELECT * FROM `users` where `age` = '?'SELECT * from `users` LIMIT 1SELECT TOP 1 * from `users`def select_format(self):
return "SELECT {columns} FROM {table} {limit}"def select_format(self):
return "SELECT {limit} {columns} FROM {table}"# MySQLGrammar
def limit_string(self):
return "LIMIT {limit}"# MSSQLGrammar
def limit_string(self):
return "TOP {limit}"# Everything completely abstracted into it's own class and class methods.
sql = self.select_format().format(
columns=self.process_columns(),
table=self.process_table(),
limit=self.process_limit()
)"SELECT {columns} FROM {table} {limit}".format(
columns="*",
table="`users`",
limit="LIMIT 1"
)
#== 'SELECT * FROM `users` LIMIT 1'"SELECT {limit} {columns} FROM {table} ".format(
columns="*",
table="`users`",
limit="TOP 1"
)
#== 'SELECT TOP 1 * FROM `users`'`users`"users"[users]table = self.table_string().format(table=table)# MySQL
table = "`{table}`".format(table=table)# MSSQL
table = "[{table}]".format(table=table)def _compile_select(self):
"SELECT {columns} FROM {table} {limit}".format(
columns="*",
table="`users`",
limit="LIMIT 1"
)
#== 'SELECT * FROM `users` LIMIT 1'def _compile_select(self):
"SELECT {columns} FROM {table} {wheres} {limit}".format(
columns=self.process_columns(),
table=self.process_from(),
limit=self.process_limit()
wheres=self.process_wheres
)
#== 'SELECT * FROM `users` LIMIT 1'def _compile_select(self):
self.select_format().format(
columns=self.process_columns(),
table=self.process_from(),
limit=self.process_limit()
wheres=self.process_wheres
)
#== 'SELECT * FROM `users` LIMIT 1'class User(Model):
passresult = User().where('...')result = User.where('...')user = User.where('age', 18)
#== <masonite.orm.QueryBuilder object>user = User.where('age', 18).where('name', 'Joe').limit(1)
#== <masonite.orm.QueryBuilder object x100>user = User.where('age', 18).where('name', 'Joe').limit(1).get()
#== <masonite.orm.Collection object x101>user = User.where('age', 18).where('name', 'Joe').limit(1).first()
#== <app.User object x100>class User:
@belongs_to('local_key', 'foreign_key')
def profile(self):
return Profileuser = User.find(1)
user.profile.cityuser = User.find(1)
user.profile().cityCREATE TABLE `table` (
`name` VARCHAR(255)
)Schema.table('users') as blueprint:
blueprint.string('name')
blueprint.integer('age')Schema.table('users') as blueprint:
blueprint.string('name')table.add_column('name', column_type='string')from masoniteorm.query import QueryBuilder
builder = QueryBuilder().table("users")from masoniteorm.query import QueryBuilder
builder = QueryBuilder().on('staging').table("users")# Without models
user = QueryBuilder().table("users").first()
# == {"id": 1, "name": "Joe" ...}
# With models
from masoniteorm.models import Model
class User(Model):
pass
user = QueryBuilder(model=User).table("users").first()
# == <app.models.User>builder.table('users').select('username').get()
# SELECT `users`.`username` FROM `users`builder.table('users').select('profiles.name').get()
# SELECT `profiles`.`name` FROM `users`builder.table('users').select('profiles.*').get()
# SELECT `profiles`.* FROM `users`builder.table('users').select('profiles.username as name').get()
# SELECT `profiles`.`username` AS name FROM `users`builder.table('users').first()
# SELECT * from `users` LIMIT 1builder.table('users').all()
# SELECT * from `users`builder.table('users').select('username').get()builder.table('users').select('username').all()builder.table('users').where('username', 'Joe').where('age', 18).get()builder.table('users').where({"username": "Joe", "age": 18}).get()builder.table('users').where('age', '=', 18).get()
builder.table('users').where('age', '>', 18).get()
builder.table('users').where('age', '<', 18).get()
builder.table('users').where('age', '>=', 18).get()
builder.table('users').where('age', '<=', 18).get()builder.table('users').where_null('admin').get()builder.table('users').where_not_null('admin').get()builder.table('users').where_in('age', [18,21,25]).get()builder.table('users').where_like('name', "Jo%").get()
builder.table('users').where_not_like('name', "Jo%").get()builder.table("users").where(lambda q: q.where("active", 1).where_null("activated_at")).get()
# SELECT * FROM "users" WHERE ("users"."active" = '1' AND "users"."activated_at" IS NULL)builder.table("users").where_in("id", lambda q: q.select("profile_id").table("profiles")).get()
# SELECT * FROM "users" WHERE "id" IN (SELECT "profiles"."profile_id" FROM "profiles")builder.table("stores").add_select("sales", lambda query: (
query.count("*").from_("sales").where_column("sales.store_id", "stores.id")
)).order_by("sales", "desc")builder.table("stores").add_select("sales", lambda query: (
query.count("*").from_("sales").where_column("sales.store_id", "stores.id")
)).where("sales", ">", "1000")def show(self, request: Request):
age = request.input('age')
article = Article.where('active', 1)
if age >= 21:
article.where('age_restricted', 1)def show(self, request: Request):
age = request.input('age')
article = Article.where('active', 1).when(age >= 21, lambda q: q.where('age_restricted', 1))builder.table('users').limit(10).get()builder.table('users').offset(10).get()builder.table('users').limit(10).offset(10).get()builder.table('users').where_between('age', 18, 21).get()builder.table('users').group_by('active').get()builder.table('users').group_by('active, name, is_admin').get()builder.table('users').group_by_raw('COUNT(*)').get()builder.table('users').sum('salary').group_by('salary').having('salary').get()builder.table('users').sum('salary').group_by('salary').having('salary', 50000).get()builder.join('other_table', 'column1', '=', 'column2')from masoniteorm.expressions import JoinClause
clause = (
JoinClause('other_table as ot')
.on('column1', '=', 'column2')
.on('column3', '=', 'column4')
.where('column3', '>', 4)
)
builder.join(clause)builder.join('other_table as ot', lambda join: (
(
join.on('column1', '=', 'column2')
.on('column3', '=', 'column4')
.where('column3', '>', 4)
)
))builder.table('users').left_join('table1', 'table2.id', '=', 'table1.table_id')builder.table('users').right_join('table1', 'table2.id', '=', 'table1.table_id')builder.table('users').increment('status')builder.table('users').decrement('status')builder.table('users').increment('status', 10)
builder.table('users').decrement('status', 10)builder.table("users").where("active", 1).paginate(number_of_results, page)builder.table("users").where("active", 1).simple_paginate(number_of_results, page)salary = builder.table('users').sum('salary').first().salarysalary = builder.table('users').avg('salary').first().salarysalary = builder.table('users').count('salary').first().salarysalary = builder.table('users').count('salary').first().salarysalary = builder.table('users').max('salary').first().salarysalary = builder.table('users').min('salary').first().salarybuilder.table('users').sum('salary as payments').get()
#== SELECT SUM(`users`.`salary`) as payments FROM `users`builder.order_by("column")builder.order_by("column", "desc")builder.order_by("name, email, active")builder.order_by("name, email desc, active")builder.order_by("name, active").order_by("name", "desc")
builder.order_by("name, email desc, active")builder.order_by_raw("name asc")builder.create({"name": "Joe", "active": 1})builder.bulk_create([
{"name": "Joe", "active": 1},
{"name": "John", "active": 0},
{"name": "Bill", "active": 1},
])builder.table('users').select_raw("COUNT(`username`) as username").where_raw("`username` = 'Joe'").get()builder.statement("select count(*) from users where active = 1")builder.statement("select count(*) from users where active = '?'", [1])from masoniteorm.expressions import Raw
builder.update({
"name": Raw('"alias"')
})
# == UPDATE "users" SET "name" = "alias"for users in builder.table('users').chunk(100):
for user in users:
user #== <User object>builder.table('users').count('salary').where('age', 18).to_sql()
#== SELECT COUNT(`users`.`salary`) AS salary FROM `users` WHERE `users`.`age` = '18'builder.table('users').count('salary').where('age', 18).to_qmark()
#== SELECT COUNT(`users`.`salary`) AS salary FROM `users` WHERE `users`.`age` = '?'builder.where('active', 0).update({
'active': 1
})
# UPDATE `users` SET `users`.`active` = 1 where `users`.`active` = 0builder.where('active', 0).delete()builder.truncate('users')builder.truncate('users', foreign_keys=True)builder.where('votes', '>', 100).shared_lock().get()builder.where('votes', '>', 100).lock_for_update().get()users = User.get() #== <masoniteorm.collections.Collection>
users.count() #== 50
users.pluck('email') #== <masoniteorm.collections.Collection> of emails
for user in users:
user.email #== '[email protected]'users = User.get().all() #== [<app.User.User>, <app.User.User>]
Collection([1, 2, 3]).all() #== [1, 2, 3]Collection([1, 2, 3, 4, 5]).avg() #== 3average_price = Product.get().avg('price')collection = Collection([1, 2, 3, 4, 5, 6, 7])
chunks = collection.chunk(2).serialize() #== [[1, 2], [3, 4], [5, 6], [7]]collection = Collection([[1, 2, 3], [4, 5, 6])
collection.collapse().serialize() #== [1, 2, 3, 4, 5, 6]collection = Collection(['foo', 'bar'])
collection.contains('foo') #== Truecollection = Collection([1, 2, 3, 4, 5])
collection.contains(lambda item: item > 5) #== Falsecollection = Collection([1, 2, 3, 4, 5])
diff = collection.diff([2, 4, 6, 8])
diff.all() #== [1, 3, 5]posts.each(lambda post: post.author().save(author))collection = Collection([1, 2, 3])
collection.every(lambda x: x*2 ).all() #== [2, 4, 6]collection = Collection([1, 2, 3, 4])
filtered = collection.filter(lambda item: item > 2)
filtered.all() #== [3, 4]collection = Collection([1, 2, 3, 4])
collection.first(lambda item: item > 2)collection = Collection([1, 2, [3, 4, 5, {'foo': 'bar'}]])
flattened = collection.flatten().all() #== [1, 2, 3, 4, 5, 'bar']collection = Collection([1, 2, 3, 4, 5])
collection.forget(1).all() #== [1,3,4,5]
collection.forget(0,2).all() #== [3,5]collection = Collection([1, 2, 3, 4, 5, 6, 7, 8, 9])
chunk = collection.for_page(2, 4).all() #== 4, 5, 6, 7collection = Collection([1, 2, 3])
collection.get(0) #== 1
collection.get(4) #== None
collection.get(4, 'default') #== 'default'
collection = Collection({"apples": 1, "cherries": 2})
collection.get("apples") #== 1collection = Collection([
{"id": 1, "type": "a"},
{"id": 2, "type": "b"},
{"id": 3, "type": "a"}
])
collection.implode("type").all()
#== {'a': [{'id': 1, 'type': 'a'}, {'id': 4, 'type': 'a'}],
# 'b': [{'id': 2, 'type': 'b'}]}collection = Collection(['foo', 'bar', 'baz'])
collection.implode() #== foo,bar,baz
collection.implode('-') #== foo-bar-bazcollection = Collection([
{'account_id': 1, 'product': 'Desk'},
{'account_id': 2, 'product': 'Chair'}
])
collection.implode(key='product') #== Desk,Chair
collection.implode(" - ", key='product') #== Desk - ChairCollection([]).is_empty() #== Truecollection = Collection([1, 2, 3, 4])
last = collection.last(lambda item: item < 3) #== 2collection = Collection([1, 2, 3, 4])
multiplied = collection.map(lambda item: item * 2).all() #== [2, 4, 6, 8]collection = Collection([1,2])
collection.map_into(str).all() #== ["1", "2"]class Point:
@classmethod
def as_dict(cls, coords, one_dim=False):
if one_dim:
return {"X": coords[0]}
return {"X": coords[0], "Y": coords[1]}
collection = Collection([(1,2), (3,4)])
collection.map_into(Point, "as_dict") #== [{'X': 1, 'Y': 2}, {'X': 3, 'Y': 4}]
collection.map_into(Point, "as_dict", one_dim=True) #== [{'X': 1}, {'X': 3}]collection = Collection([1,2,3])
collection.max() #== 3collection = Collection([
{'product_id': 1, 'product': 'Desk'},
{'product_id': 2, 'product': 'Chair'}
{'product_id': 3, 'product': 'Table'}
])
collection.max("product_id") #== 3collection = Collection(['Desk', 'Chair'])
collection.merge(['Bookcase', 'Door'])
collection.all() #== ['Desk', 'Chair', 'Bookcase', 'Door']collection = Collection([
{'product_id': 1, 'product': 'Desk'},
{'product_id': 2, 'product': 'Chair'}
{'product_id': 3, 'product': None}
])
plucked = collection.pluck('product').all() #== ['Desk', 'Chair', None]collection.pluck("product", "product_id") #== {1: 'Desk', 2: 'Chair', 3: None}collection.pluck("product", keep_nulls=False) #== ['Desk', 'Chair']collection = Collection([1, 2, 3, 4, 5])
collection.pop() #== 5
collection.all() #== [1, 2, 3, 4]collection = Collection([1, 2, 3, 4])
collection.prepend(0)
collection.all() #== [0, 1, 2, 3, 4]collection = Collection([1, 2, 3, 4])
collection.pull(1) #== 2
collection.all() #== [1, 3, 4]
collection = Collection({'apple': 1, 'cherry': 3, 'lemon': 2})
collection.pull('cherry') #== 3
collection.all() #== {'apple': 1, 'lemon': 2}collection = Collection([1, 2, 3, 4])
collection.push(5)
collection.all() #== [1, 2, 3, 4, 5]collection = Collection([1, 2, 3, 4])
collection.put(1, 5)
collection.all() #== [1, 5, 3, 4]
collection = Collection({'apple': 1, 'cherry': 3, 'lemon': 2})
collection.put('cherry', 0)
collection.all() #== {'apple': 1, 'cherry': 0, 'lemon': 2}user = User.all().random() #== returns a random User instanceusers = User.all().random(3) #== returns a Collection of 3 users
users.count() #== 3
users.all() #== returns a list of 3 userscollection = Collection([1, 2, 3])
collection.reduce(lambda result, item: (result or 0) + item) #== 6collection.reduce(lambda result, item: (result or 0) + item, 4) #== 10collection = Collection([1, 2, 3, 4])
filtered = collection.reject(lambda item: item > 2)
filtered.all() #== [1, 2]collection = Collection([1, 2, 3])
collection.reverse().all() #== [3, 2, 1]collection = Collection([1, 2, 3])
collection.serialize() #== [1, 2, 3]
collection = Collection([User.find(1)])
collection.serialize() #== [{'id': 1, 'name': 'John', 'email': '[email protected]'}]collection = Collection([1, 2, 3, 4, 5])
collection.shift() #== 1
collection.all() #== [2, 3, 4, 5]collection = Collection([5, 3, 1, 2, 4])
sorted = collection.sort()
sorted.all() #== [1, 2, 3, 4, 5]Collection([1, 2, 3, 4, 5]).sum() #== 15collection = Collection([
{'name': 'JavaScript: The Good Parts', 'pages': 176},
{'name': 'JavaScript: The Defnitive Guide', 'pages': 1096}
])
collection.sum('pages') #== 1272collection = Collection([0, 1, 2, 3, 4, 5])
chunk = collection.take(3)
chunk.all() #== [0, 1, 2]chunk = collection.chunk(-2)
chunk.all() #== [4, 5]collection = Collection([{'name': 'Desk', 'price': 200}])
collection.to_json() #== '[{"name": "Desk", "price": 200}]'collection = Collection([1, 2, 3, 4, 5])
collection.transform(lambda item: item * 2)
collection.all() #== [2, 4, 6, 8, 10]collection = Collection([1, 1, 2, 2, 3, 4, 2])
unique = collection.unique()
unique.all() #== [1, 2, 3, 4]collection = Collection([
{'name': 'Sam', 'role': 'admin'},
{'name': 'Joe', 'role': 'basic'},
{'name': 'Joe', 'role': 'admin'},
])
unique = collection.unique('name')
unique.all()
# [
# {'name': 'Sam', 'role': 'admin'},
# {'name': 'Joe', 'role': 'basic'}
# ]collection = Collection([
{'name': 'Desk', 'price': 200},
{'name': 'Chair', 'price': 100},
{'name': 'Bookcase', 'price': 150},
{'name': 'Door', 'price': 100},
])
filtered = collection.where('price', 100)
filtered.all()
# [
# {'name': 'Chair', 'price': 100},
# {'name': 'Door', 'price': 100}
# ]collection = Collection(['Chair', 'Desk'])
zipped = collection.zip([100, 200])
zipped.all() #== [('Chair', 100), ('Desk', 200)]$ python masonite-orm model Postfrom masoniteorm.models import Model
class Post(Model):
"""Post Model"""
passuser = User.first()
users = User.all()
active_users = User.where('active', 1).first()class Clients:
__table__ = "users"class Clients:
__primary_key__ = "user_id"class Clients:
__connection__ = "staging"class Clients:
__fillable__ = ["email", "active", "password"]class Clients:
__guarded__ = ["password"]class Clients:
__timestamps__ = Falseclass User(Model):
__timezone__ = "Europe/Paris"from app.models.User import User
user = User.first()
user.name #== 'Joe'
user.email #== '[email protected]'from app.models.User import User
user = User.find(1)
user.name #== 'Joe'
user.email #== '[email protected]'from app.models.User import User
users = User.where('active', 1).get()
for user in users:
user.name #== 'Joe'
user.active #== '1'
user.email #== '[email protected]'users = User.find([1,2,3])
for users in users:
user.name #== 'Joe'
user.active #== '1'
user.email #== '[email protected]'user_emails = User.where('active', 1).get().pluck('email') #== Collection of email addressesfrom app.models.User import User
user = User.delete(1)from app.models.User import User
user = User.where('active', 0).delete()from app.models.User import User
users = User.where(lambda q: q.where('active', 1).where_null('deleted_at'))
# == SELECT * FROM `users` WHERE (`active` = '1' AND `deleted_at` IS NULL)class Store(Model):
__selects__ = ["username", "administrator as is_admin"]store.all()
#== SELECT `username`, `administrator` as is_admin FROM `users`store.all(["username", "administrator as is_admin"])
#== SELECT `username`, `administrator` as is_admin FROM `users`store.where("active", 1).get(["username", "administrator as is_admin"])
#== SELECT `username`, `administrator` as is_admin FROM `users` WHERE `active` = 1from masoniteorm.relationships import belongs_to
class User:
@belongs_to
def company(self):
from app.models.Company import Company
return Companyfrom masoniteorm.relationships import belongs_to
class User:
@belongs_to('primary_key_id', 'user_id')
def company(self):
from app.models.Company import Company
return Companyfrom masoniteorm.relationships import has_one
class User:
@has_one
def company(self):
from app.models.Company import Company
return Companyfrom masoniteorm.relationships import has_one
class User:
@has_one('other_key', 'local_key')
def company(self):
from app.models.Company import Company
return Companyfrom masoniteorm.relationships import has_many
class User:
@has_many('company_id', 'id')
def posts(self):
from app.models.Post import Post
return Poststores
-------
id
name
product_store
--------------
id
store_id
product_id
product
--------
id
namefrom masoniteorm.models import Model
from masoniteorm.relationships import belongs_to_many
class Store(Model):
@belongs_to_many
def products(self):
from app.models.Product import Product
return Productfrom masoniteorm.models import Model
from masoniteorm.relationships import belongs_to_many
class Store(Model):
@belongs_to_many("store_id", "product_id", "id", "id")
def products(self):
from app.models.Product import Product
return Product@belongs_to_many("store_id", "product_id", "id", "id", extra_fields=['is_active'])
def products(self):
from app.models.Product import Product
return Productstore = Store.find(1)
for product in store.products:
product.name #== Red Shirtstore = Store.find(1)
for product in store.products:
product.pivot.updated_at #== 2021-01-01
product.pivot.update({"updated_at": "2021-01-02"})@belongs_to_many(pivot_id=None)@belongs_to_many(pivot_id="other_column")@belongs_to_many(table="home_ownership")@belongs_to_many(with_timestamps=True)@belongs_to_many(attribute="ownerships")store = Store.find(1)
for product in store.products:
product.ownerships.updated_at #== 2021-01-01
product.ownerships.update({"updated_at": "2021-01-02"})user = User.first()
user.company #== <app.models.Company>
user.company.name #== Masonite X Inc.
for post in user.posts:
post.titleRole.with_count('permissions').get()roles = Role.with_count('permissions').get()
for role in roles:
role.permissions_count #== 7roles = Role.with_count('permissions').find(1).permissions_count #== 7Role.with_count(
'permissions',
lambda q: (
q.where_like("name", "%Creates%")
)users = User.all()
for user in users:
user.phoneSELECT * FROM users
SELECT * FROM phones where user_id = 1
SELECT * FROM phones where user_id = 2
SELECT * FROM phones where user_id = 3
SELECT * FROM phones where user_id = 4
...users = User.with_('phone').get()
for user in users:
user.phoneSELECT * FROM users
SELECT * FROM phones where user_id IN (1, 2, 3, 4)from masoniteorm.models import Model
from masoniteorm.relationships import belongs_to_many
class Store(Model):
__with__ = ['products']
@belongs_to_many
def products(self):
from app.models.Product import Product
return Productusers = User.all()
for user in users:
for contact in user.phone:
contact.nameSELECT * FROM users
SELECT * FROM phones where user_id = 1
SELECT * from contacts where phone_id = 30
SELECT * FROM phones where user_id = 2
SELECT * from contacts where phone_id = 31
SELECT * FROM phones where user_id = 3
SELECT * from contacts where phone_id = 32
SELECT * FROM phones where user_id = 4
SELECT * from contacts where phone_id = 33
...users = User.with_('phone.contacts').all()
for user in users:
for contact in user.phone:
contact.nameSELECT * FROM users
SELECT * FROM phones where user_id IN (1,2,3,4)
SELECT * from contacts where phone_id IN (30, 31, 32, 33)from masoniteorm.relationships import has_many
class User:
@has_many('company_id', 'id')
def posts(self):
from app.models.Post import Post
return PostUser.joins('posts')User.joins('posts', clause="right")User.join_on('posts', lambda q: (
q.where('active', 1)
))user = User.where('active', 1).get()from masoniteorm.scopes import scope
class User(Model):
@scope
def active(self, query):
return query.where('active', 1)user = User.active().get()from masoniteorm.scopes import scope
class User(Model):
@scope
def active(self, query, active_or_inactive):
return query.where('active', active_or_inactive)user = User.active(1).get()
user = User.active(0).get()from masoniteorm.scopes import SoftDeletesMixin
class User(Model, SoftDeletesMixin):
# ..User.delete(1)
# == UPDATE `users` SET `deleted_at` = '2020-01-01 10:00:00' WHERE `id` = 1User.all() #== SELECT * FROM `users` WHERE `deleted_at` IS NULLUser.with_trashed().all() #== SELECT * FROM `users`User.only_trashed().all() #== SELECT * FROM `users` WHERE `deleted_at` IS NOT NULLUser.where('admin', 1).restore() #== UPDATE `users` SET `deleted_at` = NULL WHERE `admin` = '1'User.where('admin', 1).force_delete() #== DELETE FROM `users` WHERE `admin` = '1'# user migrations
with self.schema.create("users") as table:
# ...
table.soft_deletes()from masoniteorm.scopes import SoftDeletesMixin
class User(Model, SoftDeletesMixin):
__deleted_at__ = "when_deleted"User.truncate()User.find(1).update({"username": "Joe"}, {'active': 1})User.find(1).update({"username": "Joe"}, force=True)class User(Model):
__force_update__ = True
User.find(1).update({"username": "Joe"})User.find(1).force_update({"username": "Joe"})User.update_or_create({"username": "Joe"}, {
'active': 1
})User.activate_timestamps(False).update({"username": "Sam"}) # updated_at won't be modified during this updateUser.create({"username": "Joe"})user = User.create({"username": "Joe"}).fresh()
user.active #== 1User.bulk_create([
{"username": "Joe"},
{"username": "John"},
{"username": "Bill"},
{"username": "Nick"},
])User.builder.new().bulk_create([
{"username": "Joe"},
{"username": "John"},
{"username": "Bill"},
{"username": "Nick"},
])User.serialize()
# returns {'id': 1, 'account_id': 1, 'first_name': 'John', 'last_name': 'Doe', 'email': '[email protected]', 'password': '$2b$12$pToeQW/1qs26CCozNiAfNugRRBNjhPvtIw86dvfJ0FDNcTDUNt3TW', 'created_at': '2021-01-03T11:35:48+00:00', 'updated_at': '2021-01-08T22:06:48+00:00' }# User.py
class User(Model):
# ...
__hidden__ = ["password", "created_at"]# User.py
class User(Model):
# ...
__visible__ = ["id", "name", "email"]from masoniteorm.scopes import UUIDPrimaryKeyMixin
class User(Model, UUIDPrimaryKeyMixin):
# ..with self.schema.create("users") as table:
table.uuid('id')
table.primary('id')import uuid
from masoniteorm.scopes import UUIDPrimaryKeyMixin
class User(Model, UUIDPrimaryKeyMixin):
__uuid_version__ = 3
# the two following parameters are only needed for UUID 3 and 5
__uuid_namespace__ = uuid.NAMESPACE_DNS
__uuid_name__ = "domain.comclass User(Model):
__casts__ = {"active": "int"}class User(Model):
__dates__ = ["verified_at"]class User(Model):
def get_new_date(self, datetime=None):
# return new instance from datetime instance.class User(Model):
def get_new_datetime_string(self, datetime=None):
return self.get_new_date(datetime).to_datetime_string()class User:
def get_name_attribute(self):
return self.first_name + ' ' + self.last_name
user = User.find(1)
user.first_name #== "Joe"
user.last_name #== "Mancuso"
user.name #== "Joe Mancuso"class User:
def set_name_attribute(self, attribute):
return str(attribute).upper()
user = User.find(1)
user.name = "joe mancuso"
user.name #== "JOE MANCUSO"masonite-orm observer User --model Userclass UserObserver:
def created(self, user):
pass
def creating(self, user):
pass
#..from app.models.User import User
from app.observers.UserObserver import UserObserver
from masonite.providers import Provider
class ModelProvider(Provider):
def boot(self):
User.observe(UserObserver())
#..from masoniteorm.models import Model
from some.place.UserObserver import UserObserver
class User(Model):
#..
User.observe(UserObserver())user = User.find(1)
articles = Articles.where('user_id', 2).get()
user.save_many('articles', articles)user = User.find(1)
phone = Phone.find(30)
user.attach('phone', phone)user = User.find(1)
user.is_dirty() #== False
user.name = "Joe"
user.is_dirty() #== Trueuser = User.find(1)
user.name #== Bill
user.name = "Joe"
user.get_dirty("name") #== Joeuser = User.find(1)
user.name #== Bill
user.name = "Joe"
user.get_original("name") #== Billuser = User.find(1)
user.name #== Bill
user.name = "Joe"
user.save()