在Vapor中,我们可以通过创建一个Pivot<U, T>
对象来创建多对多关系,其中U
和T
是我们想要链接在一起的模型。所以,如果我想创建一个系统,User
S可有许多File
S和许多File
S可属于许多User
S,我想他们这样的关联:如何将附加信息添加到数据透视表(使用Fluent)?
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>
类型创建此表。
+---------+---------+------+-----+---------+----------------+
| 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 | |
+---------+---------+------+-----+---------+----------------+
但我想代表像这样的能力:
+---------+---------+------+-----+---------+----------------+
| 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 | |
+---------+---------+------+-----+---------+----------------+
我认为这是一个很好的答案,但仍有一些问题。你说创建一个新的类作为一个枢纽,这是否意味着我应该继承它?如果你留下一个小例子,我会很感激。 –
由于它不是“开放”,因此无法继承它。 Do:class MyPivot:Model {} – tanner0101
那么,这的确回答说我不得不基于Model创建自己的Pivot,而不是子类化'Pivot'。猜猜我会进一步探索这个想法,看看它是如何发展的。 –