CakePHPでデータ操作
〜担当者アサイン機能の実装〜
AWS上で構築するRESTfulアプリ勉強会
~Web開発ワークショップ~【第6回】
概要
概要
1. アソシエーションとは
2. やりたいこと
3. 今回追加する機能
概要
1. アソシエーションとは
2. やりたいこと
3. 今回追加する機能
「アソシエーション」
=Model間の関連をマッ
ピングしてくれる機能
要は、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)
楽をする
=SQLを書かずにコードで
書く
→CakePHPがよろしくやっ
てくれる!
詳しくは後ほど!
概要
1. アソシエーションとは
2. やりたいこと
3. 今回追加する機能
TODOリストアプリの
マルチユーザ対応!
(しょぼいですけど…)
概要
1. ログインとは
2. やりたいこと
3. 今回追加する機能
今回追加する機能
1. TODO追加時に担当者を指
定する
2. 更新時担当者を変えられる
3. 担当者、オーナのみ○○出
来る
担当者を指定
担当者を変える
担当者、オーナのみ○○出来る
担当またはオーナ
だけ操作可能
ワークショップ
本日のメニュー
1. 事前準備
2. Lesson1
サーバサイド開発
3. Lesson1.5
アソシエーションの実験
4. Lesson2
クライアントサイド開発
事前準備
• gitのブランチを整える
• テーブルに列を追加する
gitのブランチを整える
■masterブランチを前回の内容
を終えた状態にする
■masterブランチを元に、今回
の作業用である、
「vol/06」ブランチを作成する
どう整えるのか
人によって手順が違い
ます!(重要)
■前回の内容を途中までやった方
■前回の内容を完了した方
■今回から参加の方
gitのブランチを整える
http://
goo.gl/WEHXqX
ジーオーオー.ジーエル/
ダブリューイーエイチエックスキューエックス
ここに詳しく
書いております!
テーブルに列を追加する
■phpMyAdminを使用する
TODO一覧登録用テーブル
 「todo_lists」に列を追加
■追加項目は、
•owner(オーナ)
•assignee(担当者)
phpMyAdmin
http://(PublicIP)/phpMyAdmin
・修正後テーブル(詳しくはQiita資料で!)
アソシエーション
を実装!
Lesson1
 サーバサイド開発
Lesson1 サーバサイド開発
■今回使用するアソシエーション
belongsTo
Lesson1 サーバサイド開発
■他は?
• hasOne
• hasMany
• hasAndBelongsToMany
Lesson1 サーバサイド開発
■他は?
• hasOne
• hasMany
• hasAndBelongsToMany
Lesson1.5
で実験します!
Lesson1 サーバサイド開発
■他は?
• hasOne
• hasMany
• hasAndBelongsToMany
今回はパス!
Lesson1.5
で実験します!
Lesson1 サーバサイド開発
■belongsTo
id
todo
owner
assignee
todo_lists
id
username
name
password
users
属している
(belongsTo)
public $belongsTo = array (
'Owner' => array (
'className' => 'User',
'foreignKey' => 'owner',
),
'Assignee' => array (
'className' => 'User',
'foreignKey' => 'assignee'
)
);
Lesson1 サーバサイド開発
■belongsTo
・TodoList.php
Lesson1.5
 アソシエーションの実験
•hasOne(1:1)
•hasMany(1:n)
■hasOne
id
todo
owner
assignee
todo_lists
id
username
name
password
users
1つ持つ
(hasOne)
Lesson1.5 アソシエーションの実験
※ホントは1:nですが無理にやってみます!
■hasOne
id
todo
owner
assignee
todo_lists
id
username
name
password
users
1つ持つ
(hasOne)
Lesson1.5 アソシエーションの実験
※ホントは1:nですが無理にやってみます!
(ウソ)
public $hasOne = array (
'TodoList' => array (
'className' => 'TodoList',
'foreignKey' => 'owner'
)
);
■hasOne
・User.php
Lesson1.5 アソシエーションの実験
■hasMany
id
todo
owner
assignee
todo_lists
id
username
name
password
users
いくつか持つ
(hasMany)
Lesson1.5 アソシエーションの実験
public $hasMany = array (
'TodoList' => array (
'className' => 'TodoList',
'foreignKey' => 'owner'
)
);
■hasMany
・User.php
Lesson1.5 アソシエーションの実験
public $hasMany = array (
'TodoList' => array (
'className' => 'TodoList',
'foreignKey' => 'owner'
)
);
■hasMany
・User.php
Lesson1.5 アソシエーションの実験
変わるのはここだけ!
詳しい方法はQiita
の資料で!
Lesson1.5 アソシエーションの実験
Lesson2に進む
前に、ソースを元
に戻しましょう!
Lesson1.5 アソシエーションの実験
なんやかんや
実装!
Lesson2
 クライアントサイド開発
前回までの内容で
ほぼいけるはず!
※少しだけポイント紹介
Lesson2 クライアントサイド開発
■ユーザ一覧情報の取得と表示
Lesson2 クライアントサイド開発
•ユーザ一覧情報を取得
・todo-layout-view.js
・todo-composite-view.js
•ユーザ一覧情報を表示
取得したユーザ情報
■ユーザ一覧情報の取得と表示
Lesson2 クライアントサイド開発
•ユーザ一覧情報を取得
・todo-layout-view.js
・todo-composite-view.js
•ユーザ一覧情報を表示
取得したユーザ情報 ビュー生成
時に渡す
onRender : function() {
this.userCollection = new UserCollection();
this.listenTo(this.userCollection,
'reset', this.onLoadUsers, this);
this.userCollection.fetch({reset : true});
},
■ユーザ一覧情報の取得
Lesson2 クライアントサイド開発
ビューの生成前に取得
・todo-layout-view.js
showTodoList : function(todoCollection){
this.listRegion.show( new TodoCompositeView({
collection : todoCollection,
userList : this.userCollection.models
}));
},
■ユーザ一覧情報の取得
Lesson2 クライアントサイド開発
ビューの生成時に取得済
みデータを渡す
・todo-layout-view.js
//ユーザ一覧を表示
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
マニュアル(Qiita)
http://
goo.gl/sIvvDG
ジーオーオー.ジーエル/
エスアイブイブイディージー
マニュアル(Qiita)
http://
goo.gl/sIvvDG
ジーオーオー.ジーエル/
エスアイブイブイディージー
はじめましょう!
絞込み1(チェックボックス)
• 自分がオーナ
• 自分が担当
絞込2(リストボックス)
• 全て
• 未完了のみ
• 完了済みのみ
🍻飲みDev🍕 テーマリスト1
hasAndBelongsToManyの実験
🍻飲みDev🍕 テーマリスト2
id
todo
owner
assignee
todo_lists
id
username
name
password
users
(owner)
id
username
name
password
users
(assignee)

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