如何使用 Diesel 主键以外的列查找值?

Uni*_*LSD 4 rust rust-diesel

我有一个用户表,想使用 Diesel 执行搜索以确保用户名未被占用。我发现执行查询的唯一方法是使用该find()函数,该函数使用主键。是否有另一个函数可以使用其他字段进行搜索,类似于SELECT * FROM users WHERE username = foo

这是我的用户表:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE users (
    user_id uuid PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL UNIQUE,
    username VARCHAR(255) NOT NULL UNIQUE,
    password VARCHAR(60) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的 Rust 结构:

#[derive(Queryable, AsChangeset, Deserialize, Serialize)]
#[table_name = "users"]
pub struct User {
    pub user_id: uuid::Uuid,
    pub username: String,
    pub password: String,
}

#[derive(Insertable, Deserialize, Serialize)]
#[table_name = "users"]
pub struct InsertableUser {
    pub username: String,
    pub password: String,
}
Run Code Online (Sandbox Code Playgroud)

wei*_*ich 7

Diesel 提供了一种通用.filter方法,让您可以构造任意复杂的 where 子句。对于您的示例查询,您会查找类似以下内容的内容:

users::table.filter(users::username.eq("foo"))
Run Code Online (Sandbox Code Playgroud)