一応検証してみたのでメモ
リンク先の記事の方法でうまくいく/うまくいかない理由がわからなかったので。
SQL データ構造+サンプルデータ
CREATE TABLE IF NOT EXISTS `posts` ( `id` int(11) NOT NULL AUTO_INCREMENT, `body` text NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; -- -- テーブルのデータをダンプしています `posts` -- INSERT INTO `posts` (`id`, `body`, `created`, `modified`) VALUES (1, 'ほげら\r\nぴよぴよ', '2010-11-18 01:50:37', '2010-11-18 01:50:40'), (2, 'ほげほげ\r\nhoge\r\nfuga\r\npiyo', '2010-11-18 01:50:58', '2010-11-18 01:51:00');
うまくいく方法 id=2を取り出す (CakePHPで複数語句のlike検索を行う « Php « Prog « Laddy inの「できそうでできないその2」)
<?php class HomeController extends AppController { var $uses = array( 'Post', ); function posts(){ $keys[0] = array('body LIKE' => '%hoge%'); $keys[1] = array('body LIKE' => '%ほげ%'); $params = array( 'conditions' => array( 'and' => array( $keys ), ), ); $posts = $this->Post->find('all', $params); debug($posts); } }
うまくいかない方法 (違う部分だけ抜粋) (CakePHPで複数語句のlike検索を行う « Php « Prog « Laddy in の「2010/11/22 追記」)
<?php $params = array( 'conditions' => array( 'and' => array( "body like" => "%hoge%", "body like" => "%ほげ%", ), ), );
「"body like" => "%hoge%",」が消えるので、id=1も取り出されてしまう
この結果が当然だと思っていますが…。