MongoDBプラグインとSearchプラグインであいまい検索できるようにした。
この記事はバッドノウハウです。以下の記事で正しい方法を書き直しました。
MongoDBプラグインを使う時には、behavior の SqlCompatible をご一緒にっ!
http://d.hatena.ne.jp/ihiro81/20111103/1320328426
普段検索フォームを作る時にCakeDCのSearchプラグインを使っているのですが、
MongoDBはSQLではない為そのままだとあいまい検索が使えません。
だいぶ無理やりですが、
app_model.phpを編集して対応させました。
<?php class AppModel extends Model { function beforeFind($queryData) { foreach ($queryData as $key => $value) { if (is_array($value)) { foreach ($value as $k => $v) { if ($key == 'conditions' && preg_match('/(.*) LIKE$/i', $k)) { unset($queryData[$key][$k]); $k = preg_replace('/(.*) LIKE$/', '$1', $k); $v = preg_replace('/^%(.*)%$/', '$1', $v); $queryData[$key][$k] = new MongoRegex("/{$v}/i"); } } } } return $queryData; } }
単純にbeforeFindでクエリーを操作してるだけですが、
これで、MySQLとMongoDBを一緒に使っててもあいまい検索できますね!