2010年09月23日

containable で関連モデルを読み込ませない

お願いします♪いいねとかつぶやいたりして下さい
 
今まで面倒だったので unbindmodel とか bindmodel を使ってた。
でも、わざわざ hasMany だろうとか belongsToだとしか指定しないといけない。

そこで、containable ビヘイビアを使えば以下のようにするだけで関連モデルを読み込ませない
ようにできる。

条件


Workモデルには
belongsTo として Userモデル
hasMany として Worktagモデル
が読み込まれている



普通にfindすると?


[1] => Array
        (
            [Work] => Array
                (
                    [id] => 18
                    [price] => 7000
                    [body] => 記事を一回書き込むだけで7000円を差し上げます。
たった5分のお仕事ですので、お気軽にご応募下さい。

[ 詳細 ]
まずは、あなたのブログやmixiなどを拝見します。
↓
そのブログ内に指定した記事を書いて下さい。
↓
記事を確認後、すぐに報酬をお支払いします。

ただし、記事は特別な事由が無い限り削除しないで下さい。

まずはお気軽にお問い合わせ下さい。
                )

            [Worktag] => Array
                (
                    [0] => Array
                        (
                            [id] => 32
                            [work_id] => 18
                            [tagname_id] => 3
                            [created] => 1284946705
                        )

                    [1] => Array
                        (
                            [id] => 31
                            [work_id] => 18
                            [tagname_id] => 215
                            [created] => 1284946705
                        )

                    [2] => Array
                        (
                            [id] => 30
                            [work_id] => 18
                            [tagname_id] => 22
                            [created] => 1284946704
                        )

                    [3] => Array
                        (
                            [id] => 25
                            [work_id] => 18
                            [tagname_id] => 211
                            [created] => 1284946704
                        )

                    [4] => Array
                        (
                            [id] => 24
                            [work_id] => 18
                            [tagname_id] => 26
                            [created] => 1284946704
                        )

                    [5] => Array
                        (
                            [id] => 29
                            [work_id] => 18
                            [tagname_id] => 214
                            [created] => 1284946704
                        )
                )

        )



という内容が表示される。

これを、以下のようにすると・・・。

Workモデルのデータだけ欲しい


unbindModelを使ってみよう



$this->Work->unbindModel(array('belongsTo' => array('User')));
$this->Work->unbindModel(array('hasMany' => array('Worktag')));
$work = $this->Work->find('all', array('order' => 'Work.id desc' , 'limit' => 3 , 'fields' => array('id' , 'price' , 'body')));


と、こういう書き方をすると

[1] => Array
        (
            [Work] => Array
                (
                    [id] => 18
                    [price] => 7000
                    [body] => 記事を一回書き込むだけで7000円を差し上げます。
たった5分のお仕事ですので、お気軽にご応募下さい。

[ 詳細 ]
まずは、あなたのブログやmixiなどを拝見します。
↓
そのブログ内に指定した記事を書いて下さい。
↓
記事を確認後、すぐに報酬をお支払いします。

ただし、記事は特別な事由が無い限り削除しないで下さい。

まずはお気軽にお問い合わせ下さい。
                )

        )


こんな感じのデータになる。

containを使ってみよう



$this->Work->contain();
$work = $this->Work->find('all', array('order' => 'Work.id desc' , 'limit' => 3 , 'fields' => array('id' , 'price' , 'body')));


と書くと、上記と同じ

[1] => Array
        (
            [Work] => Array
                (
                    [id] => 18
                    [price] => 7000
                    [body] => 記事を一回書き込むだけで7000円を差し上げます。
たった5分のお仕事ですので、お気軽にご応募下さい。

[ 詳細 ]
まずは、あなたのブログやmixiなどを拝見します。
↓
そのブログ内に指定した記事を書いて下さい。
↓
記事を確認後、すぐに報酬をお支払いします。

ただし、記事は特別な事由が無い限り削除しないで下さい。

まずはお気軽にお問い合わせ下さい。
                )

        )


というデータになる。
よって、関連モデル外すなら contain を使った方が圧倒的に楽。
関連するタグ: PHP cakephp
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ