Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将附加信息添加到数据透视(使用Fluent)?

如何将附加信息添加到数据透视(使用Fluent)?
EN

Stack Overflow用户
提问于 2016-11-12 09:24:47
回答 2查看 1.1K关注 0票数 6

在Vapor中,我们可以通过创建一个Pivot<U, T>对象来创建多到多的关系,其中UT是我们希望链接在一起的模型。因此,如果我想创建一个系统,其中Users可以有很多File,很多File可以属于许多User,那么我将它们联系在一起如下:

代码语言:javascript
运行
AI代码解释
复制
var alice = User(name: "Alice")
try! alice.save()
var sales = File(name: "sales.xclx")
try! sales.save()

var pivot = Pivot<User, File>(alice, sales)
try! pivot.save()

我不知道我的一生是如何使Pivot<User, File>包含更多信息的?例如,我想知道这个文件是何时与Alice相关联的,或者她对它有什么权限。

在关系数据库上,Fluent为Pivot<User, File>类型创建此表。

代码语言:javascript
运行
AI代码解释
复制
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | PRI | NULL    | auto_increment |
| file_id | int(11) | NO   |     | NULL    |                |
| user_id | int(11) | NO   |     | NULL    |                |
+---------+---------+------+-----+---------+----------------+

但我希望能代表这样的东西:

代码语言:javascript
运行
AI代码解释
复制
+---------+---------+------+-----+---------+----------------+
| Field   | Type    | Null | Key | Default | Extra          |
+---------+---------+------+-----+---------+----------------+
| id      | int(11) | NO   | PRI | NULL    | auto_increment |
| file_id | int(11) | NO   |     | NULL    |                |
| user_id | int(11) | NO   |     | NULL    |                |
| date    | date    | NO   |     | NULL    |                |
| perms   | varchar | NO   |     | READ    |                |
+---------+---------+------+-----+---------+----------------+
EN

回答 2

Stack Overflow用户

发布于 2016-11-14 08:21:44

Pivot<U, T>对象可以被认为是像siblings这样的枢轴关系所需的“最低限度”字段。

如果要向此表添加自定义字段,则可以创建自己的类作为支点,只要它具有所需的元素:

  • FooBar的表名是bar_foo (小写,按字母顺序排列)
  • 至少有三列:idbar_idfoo_id

换句话说,由pivot类创建的表必须至少具有Pivot<Foo, Bar>准备所创建的元素。

这样,您就可以通过创建和保存pivot类的实例来创建新的枢轴关系。

当在使用此透视表的模型上调用.siblings()关系时,仍然会创建默认的Pivot<U, T>来执行提取。但是,这不会产生任何问题,因为所需的字段存在于pivot表中。

票数 6
EN

Stack Overflow用户

发布于 2017-01-17 02:49:05

所以,在安迪描述了同样的问题,并要求在Vapor上找到一个解决方案之后,我被重定向到这里。

我对坦纳提出的解决方案的实现(使用PostgreSQL)可以找到这里

关键是Rating模型:

  • 它是一个普通的Model子类
  • 它的entity名称为movie_user (按字母顺序由坦纳描述相关模型的名称)
  • 它有字段userId (映射到"user_id")和movieId (映射到"movie_id"),两者都属于Node类型。
  • prepare(Database)中,它再次使用名称"movie_user",并将Id字段定义为Int的字段。

有了这个设置,您就可以定义以下关系方便方法:

Movie上:所有评分员

代码语言:javascript
运行
AI代码解释
复制
extension Movie {
    func raters() throws -> Siblings<User> {
        return try siblings()
    }
}

User上:所有分级电影

代码语言:javascript
运行
AI代码解释
复制
extension User {
    func ratedMovies() throws -> Siblings<Movie> {
        return try siblings()
    }
}

电影的新评级(对用户而言)可以如下所示:

代码语言:javascript
运行
AI代码解释
复制
ratings.post() { request in
    var rating = try Rating(node: request.json)
    try rating.save()
    return rating
}

因为Rating是一个Model子类,所以我们可以直接从请求JSON创建它。这要求客户端发送符合Rating类节点结构的JSON文档:

代码语言:javascript
运行
AI代码解释
复制
{
    "user_id": <the rating users id>,
    "movie_id": <the id of the movie to be rated>,
    "stars": <1-5 or whatever makes sense for your usecase>
}

要获得给定电影的所有实际Rating,您似乎必须手动解决关系(至少我认为是这样的,也许有人可以给我一个更好的提示):

代码语言:javascript
运行
AI代码解释
复制
let ratings = try Rating.query().filter("movie_id", movieId).all()

而且,现在似乎无法以某种方式计算数据库的平均值。我会喜欢这样的工作:

代码语言:javascript
运行
AI代码解释
复制
// this is now how it works
let averageRating = try Rating.query().filter("movie_id", movieId).average("stars")

所以我希望这对任何遇到这个问题的人都有帮助。感谢所有为Vapor项目做出贡献的优秀人士!

Thx到@WERUreo,因为它指出创建评级的部分丢失了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40565582

复制
相关文章
编程篇(006)-请写出以下代码的执行结果
(function() { fn(); var fn = function() { alert(1); } fn(); function fn() { alert(2) } })() 参考答案: 第一次弹出2,第二次弹出1 解析: // 变量提升之后的代码: (function() { function fn() { alert(2) } var fn; fn(); // 弹出2
齐丶先丶森
2022/05/12
2650
编程篇(007)-请写出以下代码的执行结果
以上两个例子中,除了var aValue = e;这一句位置不同:例1位于外层匿名函数中、例2位于内层匿名函数中,其他部分完全相同。为什么结果不同?
齐丶先丶森
2022/05/12
3280
hibernate for循环执行添加操作出错问题
hibernate插入对象的时候,对于id唯一,数据库设置为自增的时候执行完操作后会将id赋予该对象
陈灬大灬海
2018/09/12
8130
hibernate for循环执行添加操作出错问题
Oracle——无法在查询中执行 DML 操作
create or replace function test_f(id varchar2) return varchar2 is Result varchar2(100); begin insert into sfcs_temp_17109 (sn)values(id);
_一级菜鸟
2019/09/10
4.4K0
Oracle——无法在查询中执行 DML 操作
Oracle中执行truncate操作出现hang
同事说某套Oracle中有一张94G容量的表需要清空,用delete删除的,但是一直卡着。
bisal
2021/11/08
6880
JS动态添加表单
<script type=”text/javascript”> function addRow()<!–js实现添加一行内容!–> { var tr=document.createElement(“tr”); var td=document.createElement(“td”); var input=document.createElement(“input”); input.setAttribute(“type”,”file”); input.setAttribute(“name”,”image[]”)
苦咖啡
2018/05/07
14.2K0
oracle 添加执行上一条指令 安装rlwrap
https://linux.linuxidc.com/index.php?folder=cHViLzIwMTEvMDcvMDQvcmx3cmFw rpm -ivh http://mirror.cent
用户5760343
2022/05/20
3930
Oracle 利用执行计划来避免排序操作
在Oracle中,利用index来避免排序 SQL> CREATE TABLE T_NOSORT (ID NUMBER PRIMARY KEY, NAME VARCHAR2(30) NOT NULL); SQL> CREATE INDEX IND_T_NOSORT_NAME ON T_NOSORT(NAME); SQL> INSERT INTO T_NOSORT SELECT ROWNUM, TABLE_NAME FROM USER_TABLES; SQL> COMMIT; SQL> SET AUTOT O
星哥玩云
2022/08/17
3430
Oracle中对临时表空间执行shrink操作
《Oracle一个诡异的临时表空间不足的问题》中提到对临时表空间执行shrink space的操作,以前一直理解只有对表能做shrink space的操作,但从官方文档看,11g开始,就可以对临时表空间执行相同的操作。
bisal
2022/09/19
5730
Oracle中对临时表空间执行shrink操作
《Oracle一个诡异的临时表空间不足的问题》中提到对临时表空间执行shrink space的操作,以前一直理解只有对表能做shrink space的操作,但从官方文档看,11g开始,就可以对临时表空间执行相同的操作。
bisal
2022/09/19
4920
14表单操作
表单操作 获取表单 获取表单元素 通过常规方式 Document对象方式。document.getElementById('form')等。 通过Document的属性forms ``document.forms` 返回结果为HTMLCollection。 通过表单的name名字。 此方法不推荐。因为在新版本的浏览器中可能不再支持。 如果返回结果为一个时类型为对象,多个时是集合。 获取表单组件元素 常规方式 Document对象方式。document.getElementById('form_input
Dreamy.TZK
2020/05/15
3860
ElementUI动态添加表单项
chao超的搬运文章
2023/10/15
3310
Hplus框架动态添加选项卡功能(扩展)
hplus框架确实是后端开发人员的福音,但是有很多功能没有实现,我根据网上大神的做法,实现了动态添加选项卡来打开新页面的功能。
别团等shy哥发育
2023/02/25
7770
Hplus框架动态添加选项卡功能(扩展)
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
  在前面一篇文章里面,我们实现了AvalonDock选项卡的动态添加,但是对于选项卡里面的内容,我们并没有实现任何有用的功能。   这篇文章里面,我们将实现对选项卡里面的内容和功能实现自定义。 完整系列   ● 第一部分   ● 第二部分   ● 第三部分 在Git中下载工程源码
全栈程序员站长
2022/09/13
1.7K0
WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
JQuery表格表单操作
1、多选框应用代码示例 <form action=”#” method=”post”> 你喜欢的明星是?<br /> <input type=”checkbox” name=”boxs” value=”张嘉译” id=”1″ /><label for=”1″>张嘉译</label> <input type=”checkbox” name=”boxs” value=”周润发” id=”2″ /><label for=”2″>周润发</label> <input type=”checkbox” name=”bo
苦咖啡
2018/05/07
1.6K0
jquery 操作表单表格
$("tr:contains('王五')").addClass("selected")
用户5760343
2019/10/08
1.6K0
jquery 操作表单表格
oracle添加not null约束
大家好,又见面了,我是你们的朋友全栈君。在创建表时,为列添加not null约束,形式如下: column_name data_type [constraint constraint_name] not null 其中,constraint constraint_name 表示为约束指定名称。 也可以为已创建的表中添加not null约束,这时就需要使用alter table… modify语句,形式如下: alter table table_name modify column_name [constraint constraint_name] not null;
全栈程序员站长
2022/09/06
8130
用 PyQt 打造具有专业外观的 GUI
如果您一直在创建表单以执行将数据输入数据库等操作,那么QFormLayout适合您。此类将小部件布置为两列布局。第一列通常显示描述预期输入的标签,第二列通常包含允许用户输入或编辑数据的输入小部件,例如QLineEdit,QComboBox或QSpinBox。
sergiojune
2021/07/19
2.9K0
用 PyQt 打造具有专业外观的 GUI
Contact Form 7插件添加表单教程
作为一个网站所有者,你绝对应该学习如何添加一个联系表单到WordPress。你的网站不是一个匿名实体。大多数人都想知道,偶尔也会和他们所读内容背后的人互动。你认为为什么会有作者简介和博客评论?今天外贸
Hoan外贸建站
2020/12/03
1.9K0
dreamweaver添加表单_dreamweaver网页制作代码
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/169646.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
1.8K0
dreamweaver添加表单_dreamweaver网页制作代码

相似问题

如何构造Python包(?)要向各个模块添加文件,请执行以下操作

13

要向选项卡添加更具描述性/更有意义的id名称,请执行以下操作

22

要添加文件,请执行以下操作

10

Jquery:如果选中单选按钮A,请执行以下操作。如果检查B,请执行以下操作

27

若要在表中添加列表项,请执行以下操作

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档