在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'。猜猜我會進一步探索這個想法,看看它是如何發展的。 –