cakephp1.2 通常のSQLとO/Rマッパーとのselectの結果の違い
今更だけどメモ。cakephpでO/Rマッパーというかfindとかした時の結果と、通常のsql(query)を実行した時の結果の違いについて。
$sql =<<<SQL select * from users u inner join posts p on p.user_id = u.id where u.id=1 SQL; pr($this->User->query($sql));
結果
Array ( [0] => Array ( [u] => Array ( [id] => 1 [user_name] => ユーザー1 ) [p] => Array ( [id] => 1 [post_date] => 2016-11-19 ) ) [1] => Array ( [u] => Array ( [id] => 1 [user_name] => ユーザー1 ) [p] => Array ( [id] => 2 [post_date] => 2016-11-20 ) ) )
O/Rマッパーを使用した場合
sql
$this->User->bindModel(array('hasMany'=>array('Post'))); pr($this->User->findById(1));
結果
Array ( [User] => Array ( [id] => 1 [user_name] => ユーザー1 ) [Post] => Array ( [0] => Array ( [id] => 1 [post_date] => 2016-11-19 ) [1] => Array ( [id] => 2 [post_date] => 2016-11-20 ) ) )
こんな感じでO/Rマッパーを使うと、重複しているUserデータが統合されることで結果がスマートになるという違いがある。
ただ通常のSQLの場合でもGROUP_CONCATとか使えば重複を省くことが可能。
資産形成におすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html