Diesel 中多个外键引用同一个表

2023-12-28

我正在尝试创建一个引用同一个表两次的结构。这样做的目的是创建一种类别层次结构。这是我正在尝试对下表执行的操作:

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)

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


The BelongsTo https://docs.diesel.rs/diesel/associations/trait.BelongsTo.html特质定义为:

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 (and ForeignKeyColumn)是关联类型,而不是泛型参数,给定Child只能有一个实现BelongsTo<Parent>.


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Diesel 中多个外键引用同一个表 的相关文章

随机推荐

  • 获取空字符串并进行验证

    有没有办法让 jsf 验证器处理空字符串 我有一个针对所有输入文本的自定义验证器 我不想也实现 required 标签 而是想让客户处理程序处理空字符串并在支持 bean 中确定该字段是否是强制性的
  • Haskell:从类型推导函数

    所以我今天在玩 Haskell 考虑给定类型自动生成函数定义 例如 函数的定义 twoply a gt b a gt c gt a gt b c 考虑到类型 对我来说这是显而易见的 如果我排除使用undefined a 所以我想出了以下几点
  • Unity 和 Oculus Go。读/写内部存储器

    我正在使用 Unity 构建 Oculus Go 应用程序 我正在尝试在 GO 的内部存储中创建一个 txt 文件 将 HMD 插入 PC 时看到的那个 我尝试了这些不同的路径 但似乎都不起作用 应用程序 持久数据路径 mnt sdcard
  • wpf InteropBitmap 到位图

    我有一个奇怪的问题 我正在尝试检索已在网络浏览器控件中加载的图像 以下代码在 WinForms 应用程序中运行良好 IHTMLControlRange imgRange IHTMLControlRange HTMLBody ie Nativ
  • Spyder 控制台 - 启动内核时发生错误

    Spyder 控制台显示错误消息 启动内核时发生错误 Traceback most recent call last File C Users ABCD Anaconda3 lib runpy py line 193 in run modu
  • 无法从 PreferenceFragment 显示 Snackbar

    我想在 Activity 托管的 PreferenceFragment 中使用 Snackbar onSharedPreferenceChange 偏好 xml
  • 如何获取多列分组中的第一个组?

    在应用 groupby 后 我一直在尝试弄清楚如何仅返回第一组 我的代码如下所示 gb df groupby col1 col2 col3 col4 col5 sum 我想要的是第一个第一组输出 我一直在尝试 get group 方法 但它
  • Facebook 响应错误中的 "error_subcode": 33 是​​什么意思?

    有谁知道这是什么意思error subcode 33 脸书回应错误 我知道这与任务许可有关 但我想百分百确定 我们收到以下错误 error message Unsupported get request Object with ID XXX
  • 如何将 Rails 应用程序从 2.3.5 升级到 3.2.x?

    我有 Rails 2 3 5 应用程序 我想升级到 3 2 x 如何升级到 Rails 3 2 x Thanks 我绝对推荐安装 Rails 升级 gem Rails升级宝石 https github com rails rails upg
  • 库中的 Google Script HTML 表单抛出错误 Uncaught

    我有一个 HTML 格式的库 如下所示 code gs function openDialog SpreadsheetApp getUi showModalDialog HtmlService createHtmlOutputFromFil
  • 正则表达式匹配除特定字符串之外的任何大写字符

    我想匹配所有包含大写字符的行 但忽略字符串A 为了增加复杂性 我想忽略不同字符串之后的所有内容 例如公开评论 以下是应该匹配和不应该匹配的示例 Matches fooBar 富酒吧富 A fooBar fooBar 注释 不匹配 C 不应触
  • 查询 Jira 中当前活动项目的所有问题

    我想创建一个在 Web 界面中处于活动状态的常规查询 为当前选定的项目选择所有问题 例如 如果我有两个项目 PROJ1 PROJ2 要选择 PROJ1 的所有问题 我将创建一个查询 Project PROJ1 但是 如果我有多个项目 我需要
  • Quartz Clustering - 服务器启动时重复触发器

    在集群设置 使用 JDBC 数据存储 中使用 Quartz 2 1 6 和 Spring 3 1 时 我们遇到了一个问题 当前背景 作业和 CRON 触发器在 spring 配置文件中定义 见下文 SchedulerFactoryBean
  • 使用 ColdFusion 将文件上传到 Google Drive

    新更新以获得更好的第二部分 现在进入 308 简历不完整 即使文件应该只是一次上传 我正在使用的基础cfgoogle来自雷 卡姆登 但谷歌已经弃用了文档上传的代码 新标准是可断点续传媒体上传 https developers google
  • 如何在 Windows 中为 Tomcat 设置 JAVA_OPTS?

    我正在尝试设置JAVA OPTS对于 Windows 计算机上的 Tomcat 但如果添加多个变量 我会不断收到错误消息 例如 这有效 set JAVA OPTS Xms512M 但这并不 set JAVA OPTS Xms512M Xmx
  • 如何在 Postgresql 中获取字符串中的当前月份和年份

    我想以字符串格式显示日期作为当前月份名称 字符串 和年份 例如 gt 2019 年 9 月 如何在 PostgreSQL 中为此编写查询 我尝试了这个查询 select date date trunc month current date
  • StackOverflowError 之前有多少次递归调用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有条件分箱

    是否可以在数据框中创建一个新列 其中 X 的容器基于另一列的值 下面的例子 AR1 PO1 和 RU1 的容器彼此不同 到目前为止 我只能获取 X 中所有值的容器 import pandas as pd import numpy as np
  • 无法在 Selenium Webdriver 中使用 send_keys 上传文件

    我在使用 Selenium Webdriver 和 Python 进行文件上传时遇到问题 我昨天重新安装了 selenium 和 python 所以我很确定一切都是最新的 如果有帮助的话 我正在使用 Windows 7 我知道其他人问过这个
  • Diesel 中多个外键引用同一个表

    我正在尝试创建一个引用同一个表两次的结构 这样做的目的是创建一种类别层次结构 这是我正在尝试对下表执行的操作 create table product category rollup id serial primary key upper