gpt4 book ai didi

rust - 在 Diesel 中引用同一个表的多个外键

转载 作者:行者123 更新时间:2023-12-03 11:26:49 26 4
gpt4 key购买 nike

我正在尝试创建一个引用同一个表两次的结构。这样做的目的是创建一种类别的层次结构。这是我要为以下表格做的事情:

create table product_category_rollup(
id serial primary key,
upper_category_id integer not null,
lower_category_id integer not null,
foreign key (upper_category_id) references product_category(id),
foreign key (lower_category_id) references product_category(id)
);

create table product_category(
id serial primary key,
name varchar unique not null
);

我正在尝试创建匹配的结构,如下所示:
#[derive(Identifiable, Queryable)]
#[table_name = "product_category"]
pub struct ProductCategory {
id: i32,
name: String,
}

#[derive(Queryable, Identifiable, Associations)]
#[belongs_to(ProductCategory, foreign_key="upper_category_id")]
#[belongs_to(ProductCategory, foreign_key="lower_category_id")]
#[table_name = "product_category_rollup"]
pub struct ProductCategoryRollup {
id: i32,
upper_category_id: i32,
lower_category_id: i32,
}

我收到一条错误消息:
error[E0119]: conflicting implementations of trait `diesel::associations::BelongsTo<entities::ProductCategory>` for type `entities::ProductCategoryRollup`:
--> src/entities.rs:29:35
|
29 | #[derive(Queryable, Identifiable, Associations)]
| ^^^^^^^^^^^^
| |
| first implementation here
| conflicting implementation for `entities::ProductCategoryRollup`
|
= note: this error originates in a derive macro (in Nightly builds, run with -Z macro-backtrace for more info)

让多个外键引用同一个表的正确方法是什么?这是柴油机中尚未解决的一些固有限制吗?

最佳答案

BelongsTo 特征定义为:

pub trait BelongsTo<Parent> {
type ForeignKey: Hash + Eq;
type ForeignKeyColumn: Column;
fn foreign_key(&self) -> Option<&Self::ForeignKey>;
fn foreign_key_column() -> Self::ForeignKeyColumn;
}
由于 ForeignKey (和 ForeignKeyColumn )是关联类型,而不是泛型参数,给定的 Child只能有 BelongsTo<Parent> 的一种实现.

总的来说,似乎 BelongsTo相当有限;请注意,它也仅限于单列。

关于rust - 在 Diesel 中引用同一个表的多个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com