2010年08月26日

cakephpでinnerjoin

お願いします♪いいねとかつぶやいたりして下さい
 
だいたい普通に findall すると以下のデータが取得できる。
ちなみに関係は
Moteria(ユーザー) 1 に対して Usertag 多 の関係。

$ar = array(
	
    0 => array(
    	'Moteria' => array(
        	
            'id' => 103,
            'name' => '太郎'
        
        ),
        
        'Usertag' => array(
        	
            '0' => array(
            	'id' => 55,
                'name' => イケメン
            ),
            '1' => array(
            	'id' => 56,
                'name' => 素敵
            ),
        )
        
     ),
     
     1 => array(
    	'Moteria' => array(
        	
            'id' => 103,
            'name' => '花子'
        
        ),
        
        'Usertag' => array(
        	
            '0' => array(
            	'id' => 56,
                'name' => 素敵
            )
        )
        
     ),
     
     2 => array(
    	'Moteria' => array(
        	
            'id' => 103,
            'name' => 'ひでまん'
        
        ),
        
        'Usertag' => array(
        )
        
     ),

);


これだと Usertag を持っていないひでまんまでデータを拾ってくる。
そんな切ないことは避けたい。

でもcakephpはうまく言うことを聞いてくれない。
これを

タグを持っていないひでまんのデータを取得しないようにするには



$this->Moteria->bindModel(array('belongsTo'=>array('Usertag'=>array(	  
			  'foreignKey'=>false,
			 'conditions'=> array('Moteria.id=Usertag.user_id'),//Usertag を少なくとも一つ以上持っているユーザーのみ読み出す
			 //'conditions'=> array('Moteria.id=Usertag.user_id','Usertag.id=159'),//Usertag を少なくとも一つ以上持っているユーザー で Usertag の ID 159 を持っているユーザーのみ読み出す
			 //'conditions'=> array('Moteria.id=Usertag.user_id','Moteria.id=221'),//Usertag を少なくとも一つ以上持っているユーザー で Moteria の ID 159 を持っているユーザーのみ読み出す
			  'type'=>'inner',
			  'fields'=>array('count(Usertag.user_id) as num')))));
			
			$users=$this->Moteria->find('all', array('group'=>'Moteria.id'));


のように書けば良い。
すると

<?
$ar = array(
	
    0 => array(
    	'Moteria' => array(
        	
            'id' => 103,
            'name' => '太郎'
        
        ),
        
        'Usertag' => array(
        	
            '0' => array(
            	'id' => 55,
                'name' => イケメン
            ),
            '1' => array(
            	'id' => 56,
                'name' => 素敵
            ),
        )
        
     ),
     
     1 => array(
    	'Moteria' => array(
        	
            'id' => 103,
            'name' => '花子'
        
        ),
        
        'Usertag' => array(
        	
            '0' => array(
            	'id' => 56,
                'name' => 素敵
            )
        )
        
     )
);
?>


というデータを取得することができる。
関連するタグ: PHP cakephp MYSQL
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




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




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