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

多対多を使うタイミング

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

仕組み

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

前提条件

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

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

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

ステップ 2: ジャンクションオブジェクトからリレーションを作成する

ジャンクションオブジェクトから、接続したい両方のオブジェクトへのリレーションフィールドを追加します。

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

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

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

  1. 引き続きジャンクションオブジェクトで、+ Add Field をクリックします
  2. フィールドタイプとして Relation を選択します
  3. 2 番目のオブジェクトを選択します(例: “Projects”)
  4. リレーションタイプを Many-to-One に設定します
  5. フィールドに名前を付けます:
    • ジャンクション側のフィールド: 例: “Project”
    • Projects 側のフィールド: 例: “Team Members”
  6. 保存をクリック

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

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

結果

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

例: People ↔ Projects

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

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

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

リレーションを追加する

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

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

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

使ってみる

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

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

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

制限事項

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

関連