Clear ORM
Search…
Welcome to Clear
Introduction
Setup
Model
Defining your model
Associations
Lifecycle
Batchs operations
Transactions & Save Points
Locks
Querying
The collection object
Filter the query
Fetching the query
Joins
Eager Loading
Window and CTE
Scopes
Writing low-level SQL
Migrations
Manage migrations
Call migration script
Migration CLI
Additional and advanced features
JSONB
Symbol vs String
Enums
BCrypt
Full Text Search
Handling multi-connection
Other resources
API Documentation
Inline documentation
Github repository
Credits
Benchmark
Powered By
GitBook
Joins
In Clear, since every Collection is a SelectBuilder object, you can write very complex queries in a simple fashion. Let's see this example:
# Get the posts of the users which have more than X posts:
def
user_with_more_than_x_posts
(
post_count
)
User
.
query
.
select
(
"users.id as id"
)
.
inner_joins
(
"posts"
){
posts
.
user_id
==
users
.
id
}
.
group_by
(
"users.id"
)
.
having
{
raw
(
"COUNT(*)"
)
>
post_count
}
end
# Get the posts of the users with more than 10 posts:
Post
.
query
.
where
{
user_id
.
in
?
(
user_with_more_than_x_posts
(
10
))
}
Joins
Joins are built using
inner_join
,
left_join
,
right_join
,
cross_join
or simply
join
method. An optional block is requested for condition:
# Retrieve users with supervisors
User
.
query
.
left_joins
(
"users as u2"
){
users
.
supervisor_id
==
u2
.
id
}
Additionally, optional parameter
lateral
can be set to true to create a LATERAL JOIN.
Previous
Model extra attributes
Next
Eager Loading
Last modified
3yr ago
Copy link