Top Banner
CakePHPでデータ操作 〜担当者アサイン機能の実装〜 AWS上で構築するRESTfulアプリ勉強会 ~Web開発ワークショップ~【第6回】
50

第6回rest勉強会 アソシエーション編

Aug 07, 2015

Download

Documents

ksimoji
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 第6回rest勉強会 アソシエーション編

CakePHPでデータ操作 〜担当者アサイン機能の実装〜

AWS上で構築するRESTfulアプリ勉強会 ~Web開発ワークショップ~【第6回】

Page 2: 第6回rest勉強会 アソシエーション編

概要

Page 3: 第6回rest勉強会 アソシエーション編

概要1. アソシエーションとは 2. やりたいこと 3. 今回追加する機能

Page 4: 第6回rest勉強会 アソシエーション編

概要1. アソシエーションとは 2. やりたいこと 3. 今回追加する機能

Page 5: 第6回rest勉強会 アソシエーション編

「アソシエーション」=Model間の関連をマッピングしてくれる機能

Page 6: 第6回rest勉強会 アソシエーション編

要は、SQLを書かずに 済ませて楽をする方法

SELECT User.id, User.username, User.password, User.name, TodoList.id, TodoList.todo, TodoList.status, TodoList.owner, TodoList.assignee FROM users AS User LEFT JOIN todo_lists AS TodoList ON (TodoList.owner = User.id)

Page 7: 第6回rest勉強会 アソシエーション編

楽をする=SQLを書かずにコードで書く →CakePHPがよろしくやってくれる!

Page 8: 第6回rest勉強会 アソシエーション編

詳しくは後ほど!

Page 9: 第6回rest勉強会 アソシエーション編

概要1. アソシエーションとは 2. やりたいこと 3. 今回追加する機能

Page 10: 第6回rest勉強会 アソシエーション編

TODOリストアプリの マルチユーザ対応!

(しょぼいですけど…)

Page 11: 第6回rest勉強会 アソシエーション編

概要1. ログインとは 2. やりたいこと 3. 今回追加する機能

Page 12: 第6回rest勉強会 アソシエーション編

今回追加する機能

1. TODO追加時に担当者を指定する 2. 更新時担当者を変えられる 3. 担当者、オーナのみ○○出来る

Page 13: 第6回rest勉強会 アソシエーション編

担当者を指定

Page 14: 第6回rest勉強会 アソシエーション編

担当者を変える

Page 15: 第6回rest勉強会 アソシエーション編

担当者、オーナのみ○○出来る

担当またはオーナ だけ操作可能

Page 16: 第6回rest勉強会 アソシエーション編

ワークショップ

Page 17: 第6回rest勉強会 アソシエーション編

本日のメニュー1. 事前準備 2. Lesson1 サーバサイド開発 3. Lesson1.5 アソシエーションの実験 4. Lesson2 クライアントサイド開発

Page 18: 第6回rest勉強会 アソシエーション編

事前準備

• gitのブランチを整える • テーブルに列を追加する

Page 19: 第6回rest勉強会 アソシエーション編

gitのブランチを整える

■masterブランチを前回の内容を終えた状態にする ■masterブランチを元に、今回の作業用である、 「vol/06」ブランチを作成する

どう整えるのか

Page 20: 第6回rest勉強会 アソシエーション編

人によって手順が違います!(重要)■前回の内容を途中までやった方 ■前回の内容を完了した方 ■今回から参加の方

gitのブランチを整える

Page 21: 第6回rest勉強会 アソシエーション編

http://

goo.gl/WEHXqXジーオーオー.ジーエル/ ダブリューイーエイチエックスキューエックス

ここに詳しく 書いております!

Page 22: 第6回rest勉強会 アソシエーション編

テーブルに列を追加する

■phpMyAdminを使用する

TODO一覧登録用テーブル  「todo_lists」に列を追加

■追加項目は、•owner(オーナ) •assignee(担当者)

Page 23: 第6回rest勉強会 アソシエーション編

phpMyAdmin

http://(PublicIP)/phpMyAdmin

・修正後テーブル(詳しくはQiita資料で!)

Page 24: 第6回rest勉強会 アソシエーション編

アソシエーション を実装!

Lesson1  サーバサイド開発

Page 25: 第6回rest勉強会 アソシエーション編

Lesson1 サーバサイド開発■今回使用するアソシエーション

belongsTo

Page 26: 第6回rest勉強会 アソシエーション編

Lesson1 サーバサイド開発■他は?•hasOne •hasMany •hasAndBelongsToMany

Page 27: 第6回rest勉強会 アソシエーション編

Lesson1 サーバサイド開発■他は?•hasOne •hasMany •hasAndBelongsToMany

Lesson1.5 で実験します!

Page 28: 第6回rest勉強会 アソシエーション編

Lesson1 サーバサイド開発■他は?•hasOne •hasMany •hasAndBelongsToMany

今回はパス!

Lesson1.5 で実験します!

Page 29: 第6回rest勉強会 アソシエーション編

Lesson1 サーバサイド開発■belongsTo

idtodoownerassignee

todo_listsid

usernamename

password

users属している (belongsTo)

Page 30: 第6回rest勉強会 アソシエーション編

public $belongsTo = array ( 'Owner' => array ( 'className' => 'User', 'foreignKey' => 'owner', ), 'Assignee' => array ( 'className' => 'User', 'foreignKey' => 'assignee' ) );

Lesson1 サーバサイド開発■belongsTo・TodoList.php

Page 31: 第6回rest勉強会 アソシエーション編

Lesson1.5  アソシエーションの実験

•hasOne(1:1) •hasMany(1:n)

Page 32: 第6回rest勉強会 アソシエーション編

■hasOne

idtodoownerassignee

todo_listsid

usernamename

password

users1つ持つ (hasOne)

Lesson1.5 アソシエーションの実験

※ホントは1:nですが無理にやってみます!

Page 33: 第6回rest勉強会 アソシエーション編

■hasOne

idtodoownerassignee

todo_listsid

usernamename

password

users1つ持つ (hasOne)

Lesson1.5 アソシエーションの実験

※ホントは1:nですが無理にやってみます!

(ウソ)

Page 34: 第6回rest勉強会 アソシエーション編

public $hasOne = array ( 'TodoList' => array ( 'className' => 'TodoList', 'foreignKey' => 'owner' ) );

■hasOne・User.php

Lesson1.5 アソシエーションの実験

Page 35: 第6回rest勉強会 アソシエーション編

■hasMany

idtodoownerassignee

todo_listsid

usernamename

password

usersいくつか持つ (hasMany)

Lesson1.5 アソシエーションの実験

Page 36: 第6回rest勉強会 アソシエーション編

public $hasMany = array ( 'TodoList' => array ( 'className' => 'TodoList', 'foreignKey' => 'owner' ) );

■hasMany・User.php

Lesson1.5 アソシエーションの実験

Page 37: 第6回rest勉強会 アソシエーション編

public $hasMany = array ( 'TodoList' => array ( 'className' => 'TodoList', 'foreignKey' => 'owner' ) );

■hasMany・User.php

Lesson1.5 アソシエーションの実験

変わるのはここだけ!

Page 38: 第6回rest勉強会 アソシエーション編

詳しい方法はQiitaの資料で!

Lesson1.5 アソシエーションの実験

Page 39: 第6回rest勉強会 アソシエーション編

Lesson2に進む前に、ソースを元に戻しましょう!

Lesson1.5 アソシエーションの実験

Page 40: 第6回rest勉強会 アソシエーション編

なんやかんや 実装!

Lesson2  クライアントサイド開発

Page 41: 第6回rest勉強会 アソシエーション編

前回までの内容でほぼいけるはず!※少しだけポイント紹介

Lesson2 クライアントサイド開発

Page 42: 第6回rest勉強会 アソシエーション編

■ユーザ一覧情報の取得と表示Lesson2 クライアントサイド開発

•ユーザ一覧情報を取得・todo-layout-view.js

・todo-composite-view.js

•ユーザ一覧情報を表示

取得したユーザ情報

Page 43: 第6回rest勉強会 アソシエーション編

■ユーザ一覧情報の取得と表示Lesson2 クライアントサイド開発

•ユーザ一覧情報を取得・todo-layout-view.js

・todo-composite-view.js

•ユーザ一覧情報を表示

取得したユーザ情報 ビュー生成時に渡す

Page 44: 第6回rest勉強会 アソシエーション編

onRender : function() { this.userCollection = new UserCollection(); this.listenTo(this.userCollection,

'reset', this.onLoadUsers, this); this.userCollection.fetch({reset : true}); },

■ユーザ一覧情報の取得Lesson2 クライアントサイド開発

ビューの生成前に取得

・todo-layout-view.js

Page 45: 第6回rest勉強会 アソシエーション編

showTodoList : function(todoCollection){ this.listRegion.show( new TodoCompositeView({ collection : todoCollection, userList : this.userCollection.models })); },

■ユーザ一覧情報の取得Lesson2 クライアントサイド開発

ビューの生成時に取得済みデータを渡す

・todo-layout-view.js

Page 46: 第6回rest勉強会 アソシエーション編

//ユーザ一覧を表示 showUserList : function($list, userList){ $.each(userList, function(index, userModel) { $list.append( "<option value='" + userModel.attributes.id + "'>" + userModel.attributes.name + "</option>"); }); },

■ユーザ一覧の表示Lesson2 クライアントサイド開発

ループ回してタグ挿入

・todo-composite-view.js

Page 47: 第6回rest勉強会 アソシエーション編

マニュアル(Qiita)

http:// goo.gl/sIvvDGジーオーオー.ジーエル/ エスアイブイブイディージー

Page 48: 第6回rest勉強会 アソシエーション編

マニュアル(Qiita)

http:// goo.gl/sIvvDGジーオーオー.ジーエル/ エスアイブイブイディージー

はじめましょう!

Page 49: 第6回rest勉強会 アソシエーション編

絞込み1(チェックボックス) • 自分がオーナ • 自分が担当 絞込2(リストボックス) • 全て • 未完了のみ • 完了済みのみ

🍻飲みDev🍕 テーマリスト1

Page 50: 第6回rest勉強会 アソシエーション編

hasAndBelongsToManyの実験🍻飲みDev🍕 テーマリスト2

idtodoownerassignee

todo_listsid

username

name

password

users (owner)

id

username

name

password

users (assignee)