[CakePHP2] SQLæãè²¼ãä»ããã¨ãCakePHPã®ã³ã¼ããçæãããµã¼ãã¹
infinitas-cms.org ã¨ããCakePHP製CMSãéçºãã¦ãã @dogmatic69 ããããããããã®ãéçºãã¦ã¾ããã
ãªãã¨ãSQLæããã¼ã¹ãããã¨ãCakePHPã®ã³ã¼ããçæãããã®ã§ãã
http://dogmatic69.com/sql-to-cakephp-find-converter
ã³ã¼ãã¯3ãã¿ã¼ã³åºåããã¾ãããªãã·ã§ã³ãé¸ã¶ã¨ãClassRegistry::initçµç±ã§ã®å¼ã³åºããã¿ã¼ã³ã¨ãåãæ¿ãå¯è½ã§ãã
- findã®ãªãã·ã§ã³ã§æå®ããæ¹æ³ find('all', $params)ã¿ãããªãã¿ã¼ã³
- Modelã®ã³ã¼ããåºåãã«ã¹ã¿ã findã¡ã½ãããçæãããã¿ã¼ã³
- Paginationã³ã³ãã¼ãã³ãã§æå®ãããã¿ã¼ã³
ãã¼ãã£ã«ãã£ã¼ã«ããªã©ãèæ ®ãã¦åºåããã¨ããç´ æ´ãããä»æ§ï¼
ãã¨ãã°ãä¸è¨ã®ãããªSQLãè²¼ãä»ããã¨
select id, SUM(your_field) from foos where id = 1 and bar = 'fuga' order by buz limit 1,1;
ã¢ãã«ãã¡ã¤ã«ã®ã³ã¼ããçæãã¦è¡¨ç¤ºãã¦ããã¾ãã
<?php class Foo extends AppModel { /** * Virtual fields * * @var array */ public $virtualFields = array( 'sum_your_field' => 'SUM(your_field)', ); /** * Custom find methods * * @var array */ public $findMethods = array( 'special' => true ); /** * Special find * * @param string $state The state of the find (before or after) * @param array $query the query conditions * @param array $results the results * * @return array */ protected function _findSpecial($state, $query, $results = array()) { if ($state == 'before') { $query['fields'] = array_merge((array)$query['fields'], array( 'Foo.id', 'Foo.sum_your_field', )); $query['conditions'] = array_merge((array)$query['conditions'], array( 'id' => '1', 'bar' => 'fuga', )); $query['order'] = array_merge((array)$query['order'], array( 'buz' => 'asc', )); $query['limit'] = 1; $query['offset'] = '1'; return $query; } return current($results); } }
ã¾ã ä¸å®å ¨ãªã¨ãããããããããã¾ãããããããªãã«ä½¿ãã便å©ãªãµã¼ãã¹ã«ãªãããã§ãã
# æ¬æ«è»¢åã®ãããªæ°ãããªãã§ããªãã§ãããããã