モデルの操作
最終更新日: 2021年9月27日
モデルを操作するブロックを選択し、ワークスペースにドラッグ&ドロップします。
操作は「登録」「更新」「削除」「取得」の4つのパターンが用意されています。
ここでは例として、注文モデルを登録するタイミングで、(注文モデルと関連のある)商品モデルの在庫数を取得するスクリプトを記述してみます。
取得したいモデルを指定し、操作を「取得」とすると、ブロックの形が変わります。取得操作では、どのデータを取得するかを一意に定めるために主キー(ID)の指定が必要になります。
今回の例では「注文」モデルが「商品」モデルの主キーを保持しています。そこでモデルブロック群から自分自身のモデルを選択し、モデル操作ブロックのID部に配置します。
ここで取得した「商品」を、ブロックの中で扱うことができます。
ここでは "zaiko" という名前の変数を作成してみます。
新たに作成した変数が利用できるようになります。
なお、変数名を選択してマウスの右クリック操作を行うと、変数名の変更や削除を行うことができます。
それでは取得ブロックで入手した在庫数を、変数 zaiko に格納する「文」を用意しましょう。取得ブロックの内部に、一つ以上の文を含めることができます。
取得ブロック内に文を含めるようにします。
変数ブロック群からzaiko変数を選択し、文の最初にセットします。
文ブロックの右側に、zaiko変数にセットする値(商品モデルの在庫項目)を指定します。
zaiko変数の値が0以下なら、注文の新規登録を失敗させる処理を加えてみましょう。
「条件判断ブロック群」から、「もし...ならば」ブロックを使って、zaiko変数が0以下ならば、を用意します。
「文ブロック群」から「エラーメッセージ表示」ブロックを選択します。
「もし...ならば」ブロックが成立した場合に、エラーメッセージブロックを実行するよう、配置します。
「文字列ブロック群」から文字列ブロックを選択し、エラーメッセージとして配置します。
動作イメージを示します。在庫数不足の場合、エラーメッセージが表示され、注文の新規登録は行われなくなります。
注文モデルの新規登録時に、関連する商品モデルの値を更新するブロックを使ってみます。
(上述した)取得モデルの説明にあるように、どの商品モデルを更新するかを特定するための「ID」を指定します。ここでは注文モデルがもっている、商品モデルへの参照項目を指定します。
自分自身(ここでは商品モデル)の値を書き換えるため、更新ブロックのギアアイコンをクリックし、左側に用意された処理ブロックを右側にドラッグ&ドロップします。
追加した処理ブロックの左側の選択肢は、自分自身(ここでは商品モデル)の項目を指定することができます。ここで指定した項目に対して、値をセットすることができます。
ここでは現在の在庫数を1つだけ、減らしてみます。「数値ブロック群」から四則演算ブロックを選び、配置します。
更新ブロックでは複数の項目を更新することができます。ギアアイコンから、処理ブロックを選択し、ドラッグ&ドロップで処理を追加します。
商品モデルの最終更新日項目に、処理時点の日付時刻をセットした例です。Wagbyが提供する日付時刻型関数NOWを使っています。
注文モデルの子モデルとして、注文明細モデルを用意したとします。(親子関係の詳細は、こちらをお読みください。)
ここで、注文モデルの登録時に、1件も注文明細モデル(子モデル)が存在しなかった場合、自動的に1件だけ作成するというスクリプトを用意してみます。
自身の子モデルの取得には、モデルブロック群の「子モデル..のデータを取得する」ブロックを使います。「もし...ならば」ブロック、およびリストブロック群の「...が空」ブロックと組み合わせて、子モデルの存在チェックを行います。
今回は、注文明細子モデルが1件も作成されなかった(つまり「空」であった)場合に、登録を行うというサンプルを用意します。モデル操作ブロックを「もし...ならば」ブロックの内部に配置し、"登録" 処理とします。
登録時に、対象モデル(ここでは注文明細モデル)の内容をセットすることができます。
ここでは、親モデルの主キーである注文IDを、子モデル(注文明細モデル)の外部キー項目にセットするブロックを用意しました。親子関係では外部キーの設定は必須です。そのため外部キーをセットするブロックは常に用意するようにしてください。
スクリプトの実行タイミング「登録(初期データ作成)」で、子モデルを作成することはできません。初期データ作成のタイミングでは、親モデルの主キーに順序値が割り当てられていないためです。そのため子モデルの外部キー項目をセットできず、親子関係の紐付けが成立しません。
削除対象のモデルと、ID(主キー)を指定することで、指定したモデルのデータを削除することができます。(サンプルは省略します。)
注文モデルと、注文明細モデルを用意します。これは親子関係とし、注文モデルの「合計」欄は、注文明細モデルの各行の「小計」の合算とします。
注文明細モデルの「小計」は、単価と数量の積です。
注文モデルの「金額」項目に、ブロックの組み合わせで合計欄をセットするようにします。はじめに「合計金額」を表す変数を用意します。
「子モデル...のデータを取得する」ブロックを用意します。このブロックは親子関係となっているモデルの「親」側で利用することができます。このブロックは通常、複数のモデルを扱うため、「リスト」ブロックを使ってループ処理を行うようにします。
処理をわかりやすくするため、リスト内で扱う変数を「注文明細」に変更します。
ループ処理で合計金額を算出します。最後に、合計金額を注文モデルにセットしています。
モデル操作ブロック
取得
取得したデータの扱い
例として、取得した値(商品の在庫数)を変数に保存してみます。ブロックの中で作成した「変数」は、このブロックの内部だけで利用できます。
在庫数が0以下の場合、エラーとする例
更新
登録
注意
削除
子モデルの取得