モデルの操作最終更新日: 2021年9月27日

モデル操作ブロック

モデルを操作するブロックを選択し、ワークスペースにドラッグ&ドロップします。

モデル操作ブロック(1)

操作は「登録」「更新」「削除」「取得」の4つのパターンが用意されています。

モデル操作ブロック(2)

取得

ここでは例として、注文モデルを登録するタイミングで、(注文モデルと関連のある)商品モデルの在庫数を取得するスクリプトを記述してみます。

注文モデル

取得したいモデルを指定し、操作を「取得」とすると、ブロックの形が変わります。取得操作では、どのデータを取得するかを一意に定めるために主キー(ID)の指定が必要になります。

取得操作を指定する(1)
取得操作を指定する(2)

今回の例では「注文」モデルが「商品」モデルの主キーを保持しています。そこでモデルブロック群から自分自身のモデルを選択し、モデル操作ブロックのID部に配置します。

※ このように、対象モデル(ここでは「注文」モデル)が、モデル参照(ここでは「商品」モデル)を行うという関係があれば、この「モデル取得」ブロックが使えます。
取得するデータのIDを指定する(1)
取得するデータのIDを指定する(2)

取得したデータの扱い

ここで取得した「商品」を、ブロックの中で扱うことができます。
例として、取得した値(商品の在庫数)を変数に保存してみます。ブロックの中で作成した「変数」は、このブロックの内部だけで利用できます。

変数ブロック群から変数の作成を行う

ここでは "zaiko" という名前の変数を作成してみます。

zaiko変数の作成(1)

新たに作成した変数が利用できるようになります。

zaiko変数の作成(2)

なお、変数名を選択してマウスの右クリック操作を行うと、変数名の変更や削除を行うことができます。

変数の名前変更や削除も行える

それでは取得ブロックで入手した在庫数を、変数 zaiko に格納する「文」を用意しましょう。取得ブロックの内部に、一つ以上の文を含めることができます。

値をセットする文

取得ブロック内に文を含めるようにします。

ブロック内に文を含める

変数ブロック群からzaiko変数を選択し、文の最初にセットします。

zaiko変数に値をセットする(1)

文ブロックの右側に、zaiko変数にセットする値(商品モデルの在庫項目)を指定します。

zaiko変数に値をセットする(2)
zaiko変数に値をセットする(3)

在庫数が0以下の場合、エラーとする例

zaiko変数の値が0以下なら、注文の新規登録を失敗させる処理を加えてみましょう。

「条件判断ブロック群」から、「もし...ならば」ブロックを使って、zaiko変数が0以下ならば、を用意します。

zaiko変数が0以下ならば

「文ブロック群」から「エラーメッセージ表示」ブロックを選択します。

エラーメッセージ表示ブロック

「もし...ならば」ブロックが成立した場合に、エラーメッセージブロックを実行するよう、配置します。

エラーメッセージブロックを配置する

「文字列ブロック群」から文字列ブロックを選択し、エラーメッセージとして配置します。

エラーメッセージ文字列を設定する

動作イメージを示します。在庫数不足の場合、エラーメッセージが表示され、注文の新規登録は行われなくなります。

注文処理が失敗した例

更新

注文モデルの新規登録時に、関連する商品モデルの値を更新するブロックを使ってみます。

(上述した)取得モデルの説明にあるように、どの商品モデルを更新するかを特定するための「ID」を指定します。ここでは注文モデルがもっている、商品モデルへの参照項目を指定します。

商品モデルを更新するブロックを用意する

自分自身(ここでは商品モデル)の値を書き換えるため、更新ブロックのギアアイコンをクリックし、左側に用意された処理ブロックを右側にドラッグ&ドロップします。

処理ブロックの配置(1)
処理ブロックの配置(2)

追加した処理ブロックの左側の選択肢は、自分自身(ここでは商品モデル)の項目を指定することができます。ここで指定した項目に対して、値をセットすることができます。

値をセットしたい項目を選択する

ここでは現在の在庫数を1つだけ、減らしてみます。「数値ブロック群」から四則演算ブロックを選び、配置します。

在庫数を1つ減らす処理

更新ブロックでは複数の項目を更新することができます。ギアアイコンから、処理ブロックを選択し、ドラッグ&ドロップで処理を追加します。

処理ブロックを追加する

商品モデルの最終更新日項目に、処理時点の日付時刻をセットした例です。Wagbyが提供する日付時刻型関数NOWを使っています。

最終更新日をセットする

登録

注文モデルの子モデルとして、注文明細モデルを用意したとします。(親子関係の詳細は、こちらをお読みください。

ここで、注文モデルの登録時に、1件も注文明細モデル(子モデル)が存在しなかった場合、自動的に1件だけ作成するというスクリプトを用意してみます。

自身の子モデルの取得には、モデルブロック群の「子モデル..のデータを取得する」ブロックを使います。「もし...ならば」ブロック、およびリストブロック群の「...が空」ブロックと組み合わせて、子モデルの存在チェックを行います。

注文明細子モデルの存在チェック

今回は、注文明細子モデルが1件も作成されなかった(つまり「空」であった)場合に、登録を行うというサンプルを用意します。モデル操作ブロックを「もし...ならば」ブロックの内部に配置し、"登録" 処理とします。

登録処理を行うブロックを用意する

登録時に、対象モデル(ここでは注文明細モデル)の内容をセットすることができます。

ここでは、親モデルの主キーである注文IDを、子モデル(注文明細モデル)の外部キー項目にセットするブロックを用意しました。親子関係では外部キーの設定は必須です。そのため外部キーをセットするブロックは常に用意するようにしてください。

外部キー項目をセットする

注意

スクリプトの実行タイミング「登録(初期データ作成)」で、子モデルを作成することはできません。初期データ作成のタイミングでは、親モデルの主キーに順序値が割り当てられていないためです。そのため子モデルの外部キー項目をセットできず、親子関係の紐付けが成立しません。

削除

削除対象のモデルと、ID(主キー)を指定することで、指定したモデルのデータを削除することができます。(サンプルは省略します。)

子モデルの取得

注文モデルと、注文明細モデルを用意します。これは親子関係とし、注文モデルの「合計」欄は、注文明細モデルの各行の「小計」の合算とします。

注文明細モデル

注文明細モデルの「小計」は、単価と数量の積です。

注文明細モデルの小計

注文モデルの「金額」項目に、ブロックの組み合わせで合計欄をセットするようにします。はじめに「合計金額」を表す変数を用意します。

合計金額を表す変数を作成する

「子モデル...のデータを取得する」ブロックを用意します。このブロックは親子関係となっているモデルの「親」側で利用することができます。このブロックは通常、複数のモデルを扱うため、「リスト」ブロックを使ってループ処理を行うようにします。

「子モデル...のデータを取得する」ブロック

処理をわかりやすくするため、リスト内で扱う変数を「注文明細」に変更します。

リスト内で扱う変数の名前を変更する(1)
リスト内で扱う変数の名前を変更する(2)

ループ処理で合計金額を算出します。最後に、合計金額を注文モデルにセットしています。

合計金額を求める