rust - 为什么 Diesel 结构中的可选字段未实现特征

标签 rust rust-diesel

我有这个结构:

#[table_name = "clients"]
#[derive(Serialize, Deserialize, Queryable, Insertable, Identifiable, Associations)]
pub struct Client {
    pub id: Option<i64>,
    pub name: String,
    pub rank: Option<i64>,
}

和以下实现:

impl Client {
    pub fn get(name: String, connection: &PgConnection) -> Option<Self> {
        match clients::table
            .filter(clients::name.eq(&name))
            .limit(1)
            .load::<Client>(connection)
        {
            Ok(clients) => Some(clients[0]),
            Err(_) => None,
        }
    }
}

这给了我以下错误:

.load::<Client>(connection) {                                                                                   
 ^^^^ the trait `diesel::Queryable<diesel::sql_types::BigInt, _>` is not implemented for `std::option::Option<i64>`

最佳答案

您的错误消息表明您无法查询 BigInt (一个 64 位 int)到 Option<i64> .那是因为你忘了说 id在你的 table declaration 中可以为空.它必须看起来像:

table! {
    clients {
        id -> Nullable<BigInt>,
        name -> Text,
        rank -> Nullable<BigInt>,
    }
}

可以看到Queryable的实现您正在寻找in the documentation .

关于rust - 为什么 Diesel 结构中的可选字段未实现特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941650/

相关文章:

vector - 仅从选项向量中获取 `Some` 内部的惯用方法?

rust - 如何计算两个 Rust 数组/切片/向量的点积?

rust - 是否可以在 Rust 柴油交易中运行异步函数

types - 类型不匹配。预期 i32,发现 ()

rust - 泛型方法的特征界限 : how to define the same bounds without repeating myself

mysql - 使用 Diesel 的声明式架构定义

postgresql - 如何使用 diesel-rs 选择部分色谱柱?

mysql - 使用 Diesel、r2d2 和 r2d2-diesel 查询数据库时出错

c - 将 C 绑定(bind)添加到 H3 Rust 库

postgresql - Rust:如何将SocketAddr转换为IpNetwork?