メインコンテンツへスキップ
多対多リレーションでは、両側で複数のレコードを相互に接続できます。 例えば、多数の連絡先が多数のプロジェクトで作業でき、各プロジェクトには多数の連絡先が紐づきます。
ベータ機能: ジャンクションリレーションは現在ベータ版です。 このガイドに進む前に、Settings → Community → Features で有効にしてください。
この機能を使うには Advanced mode も有効にする必要があります(Settings の左下にあるトグルで切り替え)。

多対多を使うタイミング

関係の両側が複数の接続を持ちうる場合に、多対多を使用します。
関係
連絡先 ↔ プロジェクト1 人の連絡先は複数のプロジェクトで作業でき、1 つのプロジェクトには複数のチームメンバーがいます。
会社 ↔ タグ1 社には複数のタグを付与でき、1 つのタグは複数の会社に適用できます。
商品 ↔ 注文1 つの商品は複数の注文に含まれ、1 件の注文には複数の商品が含まれます。

仕組み

Twenty は多対多リレーションに ジャンクションオブジェクト パターンを使用します。 ジャンクションオブジェクトは 2 つのオブジェクトの間に位置し、接続を保持します。
People ←→ Project Assignments ←→ Projects
Project Assignments オブジェクト(ジャンクション)には次があります。
  • People へのリレーション(多対1)
  • Projects へのリレーション(多対1)
ジャンクションリレーションのトグルを有効にすると、Twenty は中間のジャンクションレコードを表示せず、リンクされたレコードを直接表示します。

前提条件

  1. ベータ機能で Junction Relations を有効化: Settings → Community → Features に移動し、Junction Relations を有効にします
  2. Advanced mode を有効化: 設定サイドバーの左下にある Advanced mode のトグルをオンにします
  3. データモデルを計画する:
    • どの 2 つのオブジェクトを接続しますか?
    • ジャンクションオブジェクトの名称は何にしますか?

ステップ 1: ジャンクションオブジェクトを作成する

まず、接続を保持する中間オブジェクトを作成します。
  1. 設定 → データモデル に移動します
  2. + New object をクリック
  3. わかりやすい名前を付けます(例: “Project Assignment”、“Team Member”、“Product Order”)
  4. “Name フィールドの作成をスキップ” をオンに切り替えます
新規ピボットオブジェクト
  1. 保存をクリック
命名規則: “Project Assignment” や “Team Membership” のように、関係を表す名前を使用してください。 これにより、データモデルが理解しやすくなります。

手順 2: オブジェクトとジャンクションの間にリレーションを作成する

2 つのオブジェクトそれぞれに、ジャンクションオブジェクトへのリレーションフィールドを追加します。

最初のリレーション(オブジェクト A → ジャンクション)

  1. Settings → Data Model で最初のオブジェクトを選択します
  2. + Add Relation をクリック
  3. ジャンクションオブジェクトを選択します(例: “Project Assignments”)
  4. リレーションタイプを One-To-Many に設定します(1 人の連絡先は複数の割り当てにリンクできます)
  5. フィールドに名前を付けます:
    • People 側のフィールド: 例: “Project Assignments”
    • ジャンクション側のフィールド: 例: “Person”
  6. 保存をクリック

2 番目のリレーション(オブジェクト B → ジャンクション)

  1. Settings → Data Model で 2 番目のオブジェクトを選択します
  2. + Add Relation をクリック
  3. ジャンクションオブジェクトを選択します(例: “Project Assignments”)
  4. リレーションタイプを 1対多 に設定します(1 つのプロジェクトは複数の割り当てにリンクできます)
  5. “これはジャンクションオブジェクトへのリレーションです” を有効にします
  1. フィールドに名前を付けます:
    • ジャンクション側のフィールド: 例: “Project”
    • Projects 側のフィールド: 例: “Team Members”
  2. 保存をクリック

ステップ 3: ジャンクションリレーションの表示を設定する

次に、中間のジャンクションオブジェクトを介さずにリンクされたレコードを直接表示するよう、元のオブジェクトを設定します。
  1. 設定 → データモデル に移動します
  2. 最初のオブジェクトを選択します(例: “People”)
  3. ジャンクションオブジェクトを指すリレーションフィールド(例: “Project Assignments”)を見つけます
  4. クリックしてフィールドを編集します
  5. “これはジャンクションオブジェクトへのリレーションです” を有効にします
  6. Target relation を選択します(例: “Project” — 反対側を指すジャンクション上のフィールド)
  7. 保存をクリック

結果

設定後:
  • Person レコードでは、“Project Assignments” フィールドに Projects が直接表示されます(割り当てレコードではありません)
  • Project レコードでは、“Team Members” フィールドに People が直接表示されます
ジャンクションオブジェクト自体は存在し接続を保存しますが、UI ではよりすっきりした多対多ビューとして表示されます。

例: People ↔ Projects

完全な手順は以下のとおりです:

ジャンクションオブジェクトを作成する

  • 名前: Project Assignment
  • 説明: “人と、その人が携わっているプロジェクトを関連付けます”

リレーションを追加する

  1. People → Project Assignment
    • タイプ: 1対多
    • People 側のフィールド: “Project Assignments”
    • Assignment 側のフィールド: “Person”
  2. Projects → Project Assignment
    • タイプ: 1対多
    • Projects 側のフィールド: “Team Members”
    • Assignment 側のフィールド: “Project”

ジャンクションの表示を設定する

  1. People オブジェクトで:
    • “Project Assignments” フィールドを編集
    • ジャンクションのトグルを有効にする
    • 対象: “Project”
  2. Projects オブジェクトで:
    • “Team Members” フィールドを編集
    • ジャンクションのトグルを有効にする
    • 対象: “Person”

使ってみる

  • Person レコードを開く → 紐づく Projects を直接表示
  • Project レコードを開く → チームメンバーを直接表示
  • どちら側からでも新しい接続を作成できます

接続に追加データを持たせる

ジャンクションオブジェクトは実体のあるオブジェクトなので、関係に関する情報を保存するためのカスタムフィールドを追加できます。
  • 役割: “Developer”、“Designer”、“Manager”
  • 開始日: プロジェクトに参加した日
  • 割り当て時間: 当該プロジェクトの週あたりの時間
このデータにアクセスするには、ジャンクションオブジェクトに直接移動するか、API 経由でクエリします。

制限事項

  • CSV インポート/エクスポート: 多対多リレーションの直接インポートには対応していません。 代わりに、ジャンクションオブジェクトにレコードをインポートしてください。
  • フィルター: 多対多リレーションでのフィルタリングには制限がある場合があります。

関連