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を一緒に使っててもあいまい検索できますね!