cakephp1.2 通常のSQLとO/Rマッパーとのselectの結果の違い

今更だけどメモ。cakephpでO/Rマッパーというかfindとかした時の結果と、通常のsql(query)を実行した時の結果の違いについて。

通常のsqlを使用した場合
sql

$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