見出し画像

bubbleのデータベースからデータを正しく扱う方法徹底解説

どうも。bubble特化エンジニアのケイです(https://twitter.com/NoCoder_K )

今回もノーコードbubbleで初心者が引っかかる落とし穴について解説します。

今回のテーマは、データの扱い方です。

データベースそのものに関しては別の記事で書いているので、まだ読んでいない方はまずそちらをご確認ください。

bubbleのデータの指定方法は独特で、first itemをつけたりつけなかったり、repeating groupや単純な1データのみの表示なのかでも扱いが変わります。

それを今回の記事で徹底解説していこうと思います。

Repeating Groupのデータ

まずはRepeating Groupからの説明です。

 Repeating Groupの使い方は、データベースの1つのテーブルを指定して、複数行を表示するものです。

例えば下のように、Userテーブルを Type of contentに指定すれば、そのRepeating Groupに表示できるのはUserテーブルのデータです。

スクリーンショット 2020-10-15 22.27.46

その上で、Data sourceという欄から、Userテーブルのどんな条件にマッチするユーザー一覧を取得するのかを指定します。

例えばDo search forで、name_katakanaというfieldが”ケイ”というユーザーを指定してみました。

スクリーンショット 2020-10-15 22.30.10

これで、何人いるかは分からないけれど、名前が”ケイ”というユーザーのリストがRepeating GroupのData sourceになります。もちろん1人かもしれませんし、10人いるかもしれません。

このように、Repeating Groupで指定するData sourceは、いつも1つ以上の基本的には複数の行データが型として入ります。

これで、1つのRepeating Groupのエレメントにデータを格納しました。


Repeating Group内の各cellのデータ

前の章で、データを格納しましたが、これだけではスクリーン上に情報を出すことはできません。なので、テキストや画像エレメントを配置します。これは非常に簡単で、下のように、current cell's User's 〇〇。とします。

スクリーンショット 2020-10-15 22.37.16

これで、各セcell (各データ行)のデータを呼び出すことができます。

この際、リレーションを使っていた場合があれば、「Current cell's User's Liked_tweet's text」などとすれば、「その行のユーザーが”いいねしたTweet"の本文」などと指定できます。

ただ、この場合はLiked_tweetはリスト型ではなく、1つだけしか入らない前提でのリレーションです。

これはあまり一般的ではないので、Liked_tweetというリレーションがListの場合は後述します。


単数データの表示方法(repeating group以外での表示)

次に、データベースの特定の1つの行からデータを取り出して表示する方法について解説します。

初めに話した、first itemが登場します。

まず比較としておさらいすると、Repeating Groupは、1つ以上のデータ行を表示するので、data sourceはlist形式になります。

しかし、今回は別ですね。

前の例で言うと、name_katakanaというfieldが”ケイ”というユーザーを指定する Do search for のname_katakana="ケイ"だけでは、それが5人いるかもしれないので、特定することはできません。

なので、ここまで仮にここまでの条件で5人のUserがヒットしたとして、次に最後の1人に絞る操作をします。それが、

スクリーンショット 2020-10-15 22.47.46

:first item、:last item、:item #ということです

5人のうちの初めのデータ行の人、5人のうちの最後のデータ行の人、5人のうちの#番目のデータ行の人という指定です。

つまり、Do search forが終わった段階ではデータの絞り込みは特定の1つに決まっていないので、このタイミングで1つのデータに絞り込むのがこれら3つのコマンドということです。

仮に5人ではなく、name_katakana="ケイ"というUserが1人しかデータベースにいなかったとしても、1人のうちの初めの人。という指定をしないと、コンピュータは最後の1人を特定することができません。

なので、よく使われる、Do search forのunique id = △]@{#|=")!×~ みたいな一見特定のデータを指定しているように思えても、その後には必ず特定の1つに絞り込むためのコマンドが必要です。

この場合は :first itemも:last itemも同じ1つ中の1つなので同じです。が、一般的には:first itemを使うのがここでは一般的です。


リレーションがListの場合

先ほどRepeating Groupの最後で少し触れましたが、リレーションがListの場合を詳しく解説します。

Do search for でuser typeのname_katakana="ケイ"の:first item's ・・・・

この続きを考えてみましょう。

リレーションではい場合は、:first item's Liked_Tweet's textで、ケイさんがいいねしたツイートの文章を取り出せます。

リレーションの場合は、少し工夫が必要です。


正解は、:first item's Liked_Tweet's :first item's textとなります。

つまり、この場合も、Liked_Tweet(いいねしたツイート)は複数あるのが前提で、その中の最初のデータ行の(1つに絞る操作)、ツイート本文。という表現が必要になります。


じゃあ、特定の人がいいねをした複数のツイートの本文を表示するにはどうしたら良いでしょうか?

もちろんRepeating Groupを使用しますが、今回の場合は、TypeはUserテーブルではなく、Tweetテーブルになります。

まずは単純に考えて、Current Userがいいねした一覧を表示する方法を考えてみると、下のように、Current User's liked_tweetをdata sourceに指定して、

スクリーンショット 2020-10-15 23.08.20

current cell's Tweet's textとします。

スクリーンショット 2020-10-15 23.09.13

では自分以外ではなく別の特定のユーザーがいいねした一覧は、上の例のCurrent Userの部分をDo search for で任意の1人のユーザーを当てると考えます。

つまりDo search for のUserのname_katakana="ケイ"の:first itemの、Liked_tweetとします。

repeating groupのtypeはTweetであるのに、data sourceは Userを検索していることで混乱するかもしれませんが、最終的にはそのdo searchで探した1人のユーザーの、Tweetリストがrepeating groupに割り当てられるので、問題ありません。

最後に残ったものが、特定の1つのデータ行なのか、1つ以上のリストなのかを自分で作りながら頭で把握しておく必要があります。

そこが要求されるものと一致していなければ、エラーが出てくる。という感じです。


以上、今回はデータの表示方法について解説しました。

first itemの意味が理解できたかと思います。

今後も、日本でまだないbubbleの情報などをTwitterをメインに発信しているのでぜひ興味あればこちらからフォローお願いします。

では!

この記事が気に入ったらサポートをしてみませんか?