ユーザーがフォームで検索入力をフィルタリングするためにlaravelビルダを適用しましたが、最適ではありません。以下のビルダーが行われるカスタムクエリ検索laravel Builderでの生のSQLステートメント
最初の入力でされています
私のフォームは次のようになります。これは私のシナリオです。
return $builder->where('city', 'LIKE', '%' . $value . '%')
->orWhere('first_name', 'LIKE', '%' . $value . '%')
->orWhere('middle_name', 'LIKE', '%' . $value . '%')
->orWhere('last_name', 'LIKE', '%' . $value . '%');
3ドロップダウンメニューのは、次のコードによってフィルタリングされています
return $builder->where('location', $value); // <-- for "selecteer locatie"
return $builder->where('level', $value); // <-- for "selecteer richting"
return $builder->where('graduation', $value); // <-- for "selecteer diplomajaar"
$値は、ユーザの入力です。
3つのドロップダウンオプションでフィルタするたびに、それは魔法として機能します。私はそれを最初のフィルタのクエリと組み合わせようとすると、実際に望む以上に多くの結果を示します。
したがって、最初のクエリではORステートメントが出されており、実際はそのバグです。私は
('statement')
これらの記号間に
"WHERE `city` LIKE %" . $value . "%
OR `first_name` LIKE %" . $value . "
OR `middle_name` LIKE %" . $value . "
OR `last_name` LIKE %" . $value . "
を実行することができますビルダーでRAW SQLステートメントを配置したい私は別にビルダーを実行することができる方法またはどのように私は入力Aすることができる方法はありますlaravel 5.3ビルダーの未加工SQLステートメント?
詳細が必要な場合は、お尋ねください。
編集:私の質問は十分に明確ではありません。以下の説明を参照してください。
私のフォームにSQLフィルタを作成するためにBuilderクラスを使用しています。
+wheres: array:7 [▼
0 => array:5 [▼
"type" => "Basic"
"column" => "city"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "and"
]
1 => array:5 [▼
"type" => "Basic"
"column" => "first_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
2 => array:5 [▼
"type" => "Basic"
"column" => "middle_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
3 => array:5 [▼
"type" => "Basic"
"column" => "last_name"
"operator" => "LIKE"
"value" => "%hof%"
"boolean" => "or"
]
4 => array:5 [▼
"type" => "Basic"
"column" => "location"
"operator" => "="
"value" => "Franeker"
"boolean" => "and"
]
5 => array:5 [▼
"type" => "Basic"
"column" => "level"
"operator" => "="
"value" => "MAVO"
"boolean" => "and"
]
6 => array:5 [▼
"type" => "Basic"
"column" => "graduation"
"operator" => "="
"value" => "1992"
"boolean" => "and"
]
]
私はcity
と比較するため、OR演算子を使用していますので、first_name
、middle_name
か:私は、高度な検索を実行すると、私のビルダーをダンプするたびに、私は+句に次の配列を持つビルダーオブジェクトを取得しますlast_name
、私は4 where where 7の代わりにを得ているはずです。これは、Builderが最初の入力で呼び出されたORステートメントをANDステートメントとみなすために発生します。このように
return $builder->where('city', 'LIKE', '%' . $value . '%')
->orWhere('first_name', 'LIKE', '%' . $value . '%')
->orWhere('middle_name', 'LIKE', '%' . $value . '%')
->orWhere('last_name', 'LIKE', '%' . $value . '%');
: