一応検証してみたのでメモ
リンク先の記事の方法でうまくいく/うまくいかない理由がわからなかったので。
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 ;
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');
<?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);
}
}
<?php
$params = array(
'conditions' => array(
'and' => array(
"body like" => "%hoge%",
"body like" => "%ほげ%",
),
),
);
「"body like" => "%hoge%",」が消えるので、id=1も取り出されてしまう
この結果が当然だと思っていますが…。