为什么在插入记录时使用 return id

why the return id was usize when inserting record

我正在使用 rust rustc 1.59.0 (9d1b2106e 2022-02-23) diesel diesel = { version = "1.4.8", features = ["postgres","64-column-tables","chrono","serde_json"] } 将记录插入 PostgreSQL 13 数据库,我想做的是在插入操作后获取插入的记录 ID。这是 Rust 代码的一部分,现在看起来像:

let menu_id = diesel::insert_into(crate::model::diesel::dolphin::dolphin_schema::menu_resource::table)
        .values(&new_menu_resource)
        .returning(crate::model::diesel::dolphin::dolphin_schema::menu_resource::id)
        .on_conflict_do_nothing()
        .execute(&connection)
        .unwrap();

这是我在 rust 中的 menu_resource 定义:

table! {
    menu_resource (id) {
        id -> Int4,
        name -> Varchar,
        res_type -> Int4,
        created_time -> Int8,
        updated_time -> Int8,
        remark -> Nullable<Varchar>,
        path -> Varchar,
        parent_id -> Int4,
        component -> Nullable<Varchar>,
        sort -> Int4,
        name_zh -> Varchar,
        tree_id_path -> Varchar,
        code -> Varchar,
    }
}

但收到的 menu_idusize 数据类型。为什么 return unsize 数据类型不是 i32?我缺少什么?我应该怎么做才能使它 return 成为 i32 的 id?我从这里开始关注文档:https://docs.diesel.rs/diesel/fn.insert_into.html 告诉我可以 return 他的价值是这样的:

let inserted_names = diesel::insert_into(users)
    .values(&vec![
        name.eq("Diva Plavalaguna"),
        name.eq("Father Vito Cornelius"),
    ])
    .returning(name)
    .get_results(&connection);
assert_eq!(Ok(vec!["Diva Plavalaguna".to_string(), "Father Vito Cornelius".to_string()]), inserted_names);

The documentation of RunQueryDsl::execute表示return值为受影响的行数, 这自然是用无符号类型 usize 表示的。 如果您真的想要 i32,请自行转换 return 值。