8 返信 最新の回答 日時: Jun 3, 2017 3:46 AM ユーザー:Nu-nrg

    多対多のリレーションシップの関連の作成方法

    Nu-nrg

      すみません、ファイルメーカーPro ad 15を利用していますが、久しぶりで色々と忘れたので教えていただけたらと思います。
      多対多のリレーションプで、関連自体の作成方法についてです。

       

      関連テーブルの操作 > リレーションシップについて > 多対多のリレーションシップ

      https://fmhelp.filemaker.com/help/16/fmp/ja/index.html#page/FMP_Help/many-to-many-relationships.html

      を見ています。

       

      理解するために、一番シンプルなよくある例ですが、学生とクラス、中間は登録テーブルを作っています。

       

      学生の入力および表示は、学生レイアウト(学生テーブル)
      クラスの入力および表示は、クラスレイアウト(クラステーブル)
      を使用しています。

       

      学生を複数クラスをポータル内に登録させるには、どうすべきでしょうか?
      (同じく、クラスに学生を登録させる場合も)

       

      リレーションで、学生とクラスから見た端の登録側は、「このリレーションシップを利用して、このテーブルでのレコードの作成を許可」にチェックを入れています

       

      学生レイアウトに、ポータルを作り、
      ポータルはマニュアルのメモセクションを読む限りでは、関連レコードをクラステーブルに設定して、クラスフィールドを設定するように記述されていますが、ポータルに入力フォームが出現しません。
      このマニュアルに書いてあることは、作成ではなく表示だからでしょうか?
      作成させる時は、関連レコードには登録テーブルを表示させるべきでしょうか?
      ポータルの関連レコードにどのテーブルを設定させ、フィールドはどのテーブルから表示するのが定石でしょうか?


      学生およびクラス自体の作成は、ポータル内で行わずそれぞれのレイアウトで行うこととします。
      登録だけそれぞれのテーブルから行うようにしたいです。
      なお、登録時はドロップダウンリストで表示させたいです。

       

       

      よろしくお願いいたします。

        • 1. Re: 多対多のリレーションシップの関連の作成方法
          Nu-nrg

          値一覧ですが、
          クラス一覧という値一覧を作成し、フィールドの値を使用

          最初のフィールドをクラス::クラスid 2番目のフィールドをクラス::クラス名として作成しました。
          クラステーブルが設定されてないレイアウトでは表示されません。

           

          フィールドの値を使用する値一覧は、ことなるレイアウトでは使用できなかったでしたでしょうか? orz

           

          追記
          この件だけ別にスレッドを立てました。
          マルチポストおゆるしください。
          別のテーブルの2つのフィールドを利用した値一覧

          • 2. Re: 多対多のリレーションシップの関連の作成方法
            user14047

            ヘルプ以上にわかりやすく説明できる自信がないので画像だけですいません。

            学生レイアウト.png

            relationships_graph.png

            FileMaker : 公式トレーニングカリキュラム FileMaker Training Series や、FileMaker Master Book 初級編/中級編/上級編  が現在、旧バージョン(FileMaker 15)の PDF 版が無償でダウンロードできますので、このあたりで体系的に学習してみてはいかがでしょうか?

             

            FileMaker : イベント/セミナー のページの下の方に、FileMaker Master Training があり、先ほど紹介した FileMaker Master Book を基にした有料のトレーニングがあります。開発の第一線で活躍されている有名な講師の方々から直接指導していただけるので、お金はかかってしまいますが、その分習得のスピードは早いかと思います。

             

            他にもLynda.comに FileMaker 向けのコースが用意され体系だった学習ができるようになっています。

            また、iOS デバイスで使える Help for FM(FileMaker のヘルプ)もあると便利かと思います。AppStore から無料でダウンロードできます。iPhone でも利用できますし、電波の入らないオフライン状態でもいつでも 気軽にヘルプを検索することができます。

            1 人中 1 人が役に立つと言っています
            • 3. Re: 多対多のリレーションシップの関連の作成方法
              Nu-nrg

              別スレではどうもです。
              添付ファイルありがとうございました。

               

               

              1枚目での画像ですが、ポータルは、登録日フィールドの代わりに、登録::登録idでも良いですよね?
              試してみましたが、登録::登録idは、レコード作成時、データ確定時どちらも大丈夫ですね、値一覧でデータを選んだ時に、それをリレーションキーとして繋がりますので。


              2枚目の画像ですが、
              なお、ポータルからクラスのレコードは作らない(登録のみ)で、登録対クラスのクラス端の[このリレーションシップを利用してこのテーブルでのレコード作成を許可]は洗濯しないようにしました。

              作成するときは、そのように設定させていただきます。

               

              別件質問なんですが、
              同じクラスを重複登録できないようにするにはどうすれば良いでしょうか?
              ご存知でしたらよろしくお願いします。

              このコミュ掲示板、スレッド分岐機能あるんですね、使ってみようかな?

              • 4. Re: 多対多のリレーションシップの関連の作成方法
                user14047
                登録日フィールドの代わりに、登録::登録idでも良いですよね?

                何でもいいです。ただユニークでなければいけない id フィールドを手打ちさせる(フィールド定義によってシリアルで上書きされますが) のは動作として理解しづらいと考え、あえて違うフィールドをもってきました。

                 

                ポータルからクラスのレコードは作らない(登録のみ)で、登録対クラスのクラス端の[このリレーションシップを利用してこのテーブルでのレコード作成を許可]は洗濯しないようにしました。

                であるのなら、「学生」レイアウトの「登録」ポータル上の「クラスid」フィールドは、「クラス::クラスid」ではなく、「登録::クラスid」にしてください。そうすれば、先ほどの「何か」のフィールドも不要になります。

                 

                同じクラスを重複登録できないようにするにはどうすれば良いでしょうか?

                trigger を使わない簡単な方法の一例...

                「登録」テーブルに「学生クラスid」という名前(なんでもいいです)のテキストフィールドを用意して計算値自動入力オプションの計算式を

                学生id & "_" & クラスid

                とし、[フィールドに既存の値が存在する場合は置き換えない] のチェックを外してください。

                さらに、[入力値の制限] で、[ユニークな値] にチェックを入れておきます。

                こうすれば、同じ「学生id」と「クラスid」の組み合わせのレコードが作れなくなります。

                 

                 

                1 人中 1 人が役に立つと言っています
                • 5. Re: 多対多のリレーションシップの関連の作成方法
                  Nu-nrg

                  user14047 による書き込み:

                   

                  trigger を使わない簡単な方法の一例...

                  「登録」テーブルに「学生クラスid」という名前(なんでもいいです)のテキストフィールドを用意して計算値自動入力オプションの計算式を

                  学生id & "_" & クラスid

                  とし、[フィールドに既存の値が存在する場合は置き換えない] のチェックを外してください。

                  さらに、[入力値の制限] で、[ユニークな値] にチェックを入れておきます。

                  こうすれば、同じ「学生id」と「クラスid」の組み合わせのレコードが作れなくなります。

                  なるほど!リレーションキーの組み合わせをテキストに変換して、その値を一意にすればよいのですね。
                  ありがとうございました。

                  • 6. Re: 多対多のリレーションシップの関連の作成方法
                    Nu-nrg

                    すいません、調子に乗ってもう一つ追加でご教示ください。
                    登録するクラスを1人あたり3つまでとかする方法はありますでしょうか?

                    • 7. Re: 多対多のリレーションシップの関連の作成方法
                      user14047

                      簡易的な制限ですが、見せるポータル行数を制限してしまえばいいかと思います。

                      構造的に制限(どこのレイアウトからの作成も一切許さない)しなければいけない場合は、それなりに敷居が高くなるかと思います。是非ご自身で考えてみてください。

                      Portal Setup.png

                      参考:

                      • 8. Re: 多対多のリレーションシップの関連の作成方法
                        Nu-nrg

                        すみませんでした、一考してみます。