Diesel不同的表存在同样的字段名的解决办法!

 Diesel使用宏定义,来定义数据库映射数据,导入的话只要如下语句:

    use crate::schema::warehouse::{dsl::*},

在上一篇讲的,inner join的话, 如下:

warehouse::table
    .inner_join(commodity::table.on(warehouse::commodity_id.eq(commodity::id)))
    .select((warehouse::id, warehouse::commodity_id,
             commodity::title, commodity::summary, warehouse::num))
    .filter(warehouse::user_id.eq(uid))
    .get_results::<WareHouseCommodityDTO>(conn)

 即指定字段的来源,即表名:warehouse::id

然而今天在做一个transaction时,还是出现如下的问题

error[E0659]: `commodity_id` is ambiguous (glob import vs glob import in the same module)
  --> src/services/apply_service.rs:40:54
   |
40 |                  .set((expired_date.eq(new_expired), commodity_id.eq(appdt.commodity_id)))
   |                                                      ^^^^^^^^^^^^ ambiguous name
   |
note: `commodity_id` could refer to the unit struct imported here

来本以为用table1::commodity_id这样就能解决,原因就在于table1与table2都存在一个同名的commodity_id的字段,diesel的issues上也没有同样的问题,

最后解决的代码如下:

    schema::warehouse::{dsl::*},
    schema::users::{
        dsl::{users, expired_date, commodity_id as users_cmd_id, email, devices_limit},
    },

warehouse还是按原来一样的导入,users的commodity_id修改成新的名字!问题解决!

Tags

添加新评论

Restricted HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。