#はじめに
検索結果をモデルコレクションで欲しいためクエリビルダではなくEloquentを使う必要があったのですが、調べるとクエリビルダのものしかヒットしなかったため、今回記事にします。初学者なため瑕疵や不備があると思うので、ツッコミやより良い方法があればどんどんお願いします
#環境
Laravel 8.79.0
PHP 8.1.1
#検索機能
PostController.php
public function search(Request $request)
{
// searchが検索ワードが入力されたフォーム部品 requiredは入力必須のバリデーション項目
$request->validate(['search' => 'required']);
// 検索ワード取得
$search = $request->search;
// 全角スペースを半角に変換
$spaceConversion = mb_convert_kana($search, 's');
// スペースやカンマ区切りで検索ワードを配列に格納
$wordArraySearched = preg_split('/[\s,]+/', $spaceConversion, -1, PREG_SPLIT_NO_EMPTY);
// 一つ目の検索ワードをwhereで抽出
$query = Post::where("title", "LIKE", "%" . $wordArraySearched[0] . "%");
// 二つ以上検索ワードがあれば抽出
if (count($wordArraySearched) > 1) {
for ($i = 1; $i < count($wordArraySearched); $i++) {
$query->Where("body", "LIKE", "%" . $wordArraySearched[$i] . "%");
}
}
// 検索結果取得
$posts = $query->get();
}
#参考
リンク内のクエリビルダによる検索機能を参考にし、一部変更しました