6

Pivot<U, T>Vapor では、オブジェクトを作成することで、多対多の関係を作成できます。ここでU、 とTは、リンクしたいモデルです。したがって、 が多数の を持ち、多数の が多数の に属することUserができるシステムを作成したい場合は、次のように関連付けます。FileFileUser

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 に関連付けられたのか、または 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    |                |
+---------+---------+------+-----+---------+----------------+
4

2 に答える 2

6

オブジェクトは、のPivot<U, T>ようなピボットされたリレーションの「最低限の」必須フィールドと考えることができますsiblings

このテーブルにカスタム フィールドを追加する場合は、必要な要素が含まれている限り、ピボットとして機能する独自のクラスを作成できます。

  • FooandBarのテーブル名bar_foo(小文字、アルファベット順)
  • 少なくとも 3 つの列が存在します: idbar_idfoo_id

つまり、ピボット クラスによって作成されたテーブルには、少なくともPivot<Foo, Bar>準備によって作成される要素が含まれている必要があります。

これが完了したら、ピボット クラスのインスタンスを作成して保存することで、新しいピボット リレーションを作成できます。

この.siblings()ピボット テーブルを使用するモデルでリレーションが呼び出されるとPivot<U, T>、フェッチを実行するためにデフォルトが作成されます。ただし、必要なフィールドがピボット テーブルに存在するため、これによって問題が生じることはありません。

于 2016-11-14T16:21:44.013 に答える