我如何使用 Diesel 的主键以外的列找到值?
How could I find a value using a column other than the primary key with Diesel?
我有 table 个用户,我想使用 Diesel 执行搜索以确保用户名未被占用。我发现执行查询的唯一方法是使用 find()
函数,它使用主键。是否有另一个使用其他字段搜索的功能,类似于 SELECT * FROM users WHERE username = foo
?
这是我的用户table:
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
);
这是我正在使用的 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,
}
Diesel 提供了一种通用的 .filter
方法,让您可以构造任意复杂的 where 子句。
对于您的示例查询,您寻找类似的东西:
users::table.filter(users::username.eq("foo"))
我有 table 个用户,我想使用 Diesel 执行搜索以确保用户名未被占用。我发现执行查询的唯一方法是使用 find()
函数,它使用主键。是否有另一个使用其他字段搜索的功能,类似于 SELECT * FROM users WHERE username = foo
?
这是我的用户table:
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
);
这是我正在使用的 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,
}
Diesel 提供了一种通用的 .filter
方法,让您可以构造任意复杂的 where 子句。
对于您的示例查询,您寻找类似的东西:
users::table.filter(users::username.eq("foo"))