Asakusa Framework : ケーススタディ:結合モデルのCSV出力
Asakusa Framework Advent Calendar 2013の10日目の記事です。
Asakusa Framework : MasterJoinのハマりやすいところ - TEPPEI STUDIOの記事で、「結合後モデルは出力できない」と書いてしまいましたが、某所で「できる」と御指摘を受けましたので、こちらで訂正したいと思います。
これまでのAsakusa Framework関連記事
ハマりやすいところシリーズ
結合モデルのCSV出力例
はじめの一歩で使ったサンプルをベースに、結合モデルのCSV出力について例示したいと思います。処理設計は以下の通りです。
結合モデル定義は以下のようにします。
"商品マスタ" @directio.csv( has_header = TRUE ) item_master = { "商品ID" @directio.csv.field(name = "商品ID") item_id : INT; "商品名" @directio.csv.field(name = "商品名") item_name : TEXT; }; "売上明細" @directio.csv( has_header = TRUE ) sales_detail = { "明細ID" @directio.csv.field(name = "明細ID") sales_id : INT; "商品ID" @directio.csv.field(name = "商品ID") item_id : INT; "売上数" @directio.csv.field(name = "売上数") sales_number : INT; }; "結合データ" @directio.csv( has_header = TRUE ) joined joined_sales_detail = item_master -> { "商品ID" @directio.csv.field(name = "商品ID") item_id -> item_id; "商品名" @directio.csv.field(name = "商品名") item_name -> item_name; } % item_id + sales_detail -> { "明細ID" @directio.csv.field(name = "明細ID") sales_id -> sales_id; "商品ID" @directio.csv.field(name = "商品ID") item_id -> item_id; "売上数" @directio.csv.field(name = "売上数") sales_number -> sales_number; } % item_id;
これでOKです。他の実装については、サンプル全体をGitHubに上げてあるので確認していただければと思います。
カラムの重複について
この例では、item_id が重複しています。この場合、左(つまり一つ目)が使われて、右(つまり二つ目)は無視されます。なので、正確にはこの例で、右(つまり二つ目)の item_id の定義は無意味です。