開発ä¸ã® CakePHP ã®æ¡ˆä»¶ã§ã©ã†ã—ã¦ã‚‚ INNER JOIN ã™ã‚‹å¿…è¦ãŒã‚りã€ã‹ã¨ã„ã£ã¦ SQL を直接書ãã®ã¯ä»–ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¨ã®å…¼ãåˆã„ã§ã§ãã‚‹ã ã‘é¿ã‘ãŸã„(ã¨ã„ã†ã‚ˆã‚Šç„¡ç†ï¼‰ãªçжæ³ã ã£ãŸã®ã§ã€çµ¶å¯¾ä½•ã‹æ–¹æ³•ãŒã‚ã‚‹ã ã‚ã†ã¨æ€ã„ソースを調ã¹ãŸã®ã§ãƒ¡ãƒ¢ã—ã¦ãŠãã¾ã™ã€‚
/cake/libs/model/model_php5.php ã® findAll メソッドã«
$queryData = array('conditions' => $conditions,
'fields' => $fields,
'joins' => array(),
'limit' => $limit,
'offset' => $offset,
'order' => $order
);
ã¨ã„ã†ã®ãŒã‚り〒joins’ 㫠空ã®é…列を入れã¦ã„る。
ã“ã® ‘joins’ ã®ä½¿ã„方を調ã¹ãŸã‚‰ã€
array(
"type" => "INNER",
"alias" => "",
"table" => INNER JOIN ã™ã‚‹ãƒ†ãƒ¼ãƒ–ル,
"conditions" => INNER JOIN ã® ONã«æŒ‡å®šã™ã‚‹æ¡ä»¶,
);
ã¨ã„ã†é…列を入れる㨠INNER JOIN ã—ã¦ãれるよã†ã§ã™ã€‚
ãŸã ã€findAll ã®ä¸ã§ joins ã«ç©ºé…列を入れã¦ã„ã‚‹ã®ã§ã€findAll を実行ã™ã‚‹ã¨ãã®ãƒ‘ラメータ㫠joins を指定ã—ã¦ã‚‚無視ã•れã¦ã—ã¾ã†ã€‚
ãã“ã§ã€ãƒ¢ãƒ‡ãƒ«ã® beforeFind メソッドを使用ã™ã‚‹ã“ã¨ã«ã—ãŸã€‚ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ findAll ã®å®Ÿè¡Œã™ã‚‹å‰ã«å‘¼ã°ã‚Œã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ã§ã™ã€‚
findAll を実行ã™ã‚‹ãƒ¢ãƒ‡ãƒ«ã«æ¬¡ã® beforeFind を定義
function beforeFind(&$queryData) {
$queryData["joins"][] = array(
"type" => "INNER",
"alias" => "",
"table" => "`model_name`",
"conditions" => array("model_name.field=model_name2.field2"),
);
return true;
}
ã“れã§å®Ÿè¡Œã•れ㟠SQL を確èªã™ã‚Œã° INNER JOIN ã•れれã„ã¾ã™ã€‚
Recent Comments