#sql-query #query-builder #query #sql-database #sql

eloquent

Eloquent 是一个用于在 Rust 中轻松构建复杂 SQL 查询的 SQL 查询构建器。

8 个版本 (1 个稳定版)

1.0.0 2024年2月14日
0.2.1 2023年4月20日
0.1.4 2023年3月24日
0.1.3 2023年1月25日

#1957数据库接口

每月下载量 36

MIT 许可证

48KB
682

Eloquent

[!警告]

此包是为了学习目的而开发的,并不打算用于生产使用。

Eloquent 是一个用于在 Rust 中轻松构建复杂 SQL 查询的 SQL 查询构建器。它受到 Laravel 的 Query Builder 的启发,设计简单易用。这与 Laravel 的 Eloquent ORM 相比,这不是一个 ORM。这个库设计用于与任何 SQL 数据库一起使用,并且没有特定的数据库功能。

查询构建器支持 selectinsertupdatedeletewherejoingroup_byhavingorder_bylimitoffsetto_sql 方法,并支持 where 子句闭包。

有关更多详细信息,请参阅 可用方法

用法

[dependencies]
eloquent = "1.0"
use eloquent_core::{Eloquent, Operator, Variable};

fn example_query() {
    let query = Eloquent::table("orders")
        .select("orders.customer_id")
        .select_as("customers.name", "customer_name")
        .select_count("orders.id", "total_orders")
        .join("customers", "orders.customer_id", "customers.id")
        .r#where(
            "orders.order_date",
            Operator::GreaterThanOrEqual,
            Variable::String("2024-01-01".to_string()),
        )
        .r#where(
            "customers.country_id",
            Operator::In,
            Variable::Array(vec![
                ArrayVariable::String("NL".to_string()),
                ArrayVariable::String("DE".to_string()),
            ]),
        )
        .where_not_null("shipped_at")
        .group_by(vec!["orders.customer_id", "customers.name"])
        .having("total_orders", Operator::GreaterThan, Variable::Int(5))
        .order_by("total_orders", Direction::Desc)
        .order_by("customer_name", Direction::Asc)
        .limit(10)
        .offset(0)
        .to_sql();

    assert_eq!(
        query,
        "SELECT orders.customer_id, customers.name AS customer_name, COUNT(orders.id) AS total_orders FROM orders JOIN customers ON orders.customer_id = customers.id WHERE orders.order_date >= `2024-01-01` AND customers.country_id IN (`NL`, `DE`) AND shipped_at IS NOT NULL GROUP BY orders.customer_id, customers.name HAVING total_orders > 5 ORDER BY total_orders DESC, customer_name ASC LIMIT 10 OFFSET 0"
    );
}
use eloquent_core::{Eloquent, Operator, Variable};

fn example_query() {
    let query = Eloquent::table("users")
        .where_closure(|closure| {
            closure
                .r#where("age", Operator::GreaterThanOrEqual, Variable::Int(18))
                .r#where("age", Operator::LessThan, Variable::Int(25));
        })
        .or_where_closure(|closure| {
            closure
                .r#where("age", Operator::GreaterThanOrEqual, Variable::Int(30))
                .r#where("age", Operator::LessThan, Variable::Int(35));
        })
        .to_sql();
    assert_eq!(
        query,
        "SELECT * FROM users WHERE (age >= 18 AND age < 25) OR (age >= 30 AND age < 35)"
    );
}

依赖项