Laravel 4 のモデルで検索フレーズを検索する次のコードがあります。「IN BOOLEAN MODE」と MATCH() および AGAINST() を使用します。
public function scopeSearch($query, $q)
{
$fields = Static::getFields();
$fields = implode(', ', $fields);
$query->whereRaw("MATCH(" . $fields . ") AGAINST('" . $q . "' IN BOOLEAN MODE)");
}
public static function getFields()
{
$field_names = array();
$disallowed = array('id', 'created_at', 'updated_at', 'deleted_at');
$columns = DB::select('SHOW COLUMNS FROM accounts');
foreach ($columns as $c) {
$field = $c->Field;
if ( ! in_array($field, $disallowed)) {
$field_names[$field] = $field;
}
}
return $field_names;
}
ユーザーが部分的な単語やフレーズを使用してフィールドを検索できるように、上記のコードを変更してください。たとえば、ユーザーが紫と入力した場合、単語紫を含む電子メール アドレス (info@purplegriffon.com) を持つレコードも検索で見つけたいと思います。したがって、本質的に部分一致です。
また、入力されたフレーズ john griffon のフィールドで griffon を含むすべてのものを検索できるようにしたいと考えています。たとえ john が存在しなくてもです。
誰でもこれで私を助けることができますか? 乾杯。