今回は検索機能について
どうも皆さんこんにちは。
今回は最近手を染めているPHPのフレームワークLaravelに関する記事です。
タイトルにもあるように今回紹介するのは「検索機能」です。
ただ一点注意して欲しいのは、今回紹介するのは僕が独自で組んだコードになりますので、正直保守性や動作の重さをほとんど考慮できていないという点です。
ですので、詳しい方で「もっと上手く書ける!」という方がいましたらコメント欄などで教えてもらえたら幸いです。。。
検索機能の役割
とりあえず簡単に今回の検索ができることを説明しておきます。
今回は「複数テーブルからキーワードを元にデータを探すことができる」ことを目標にしました。
なんだかよくわかりにくいと思いますので、わかりやすく「食べ物」で考えます。
例えば、「野菜」と検索した時に、参照して欲しいのはカテゴリーテーブルですよね。
でも「人参」と検索した時にカテゴリーテーブルをみてもそんなデータはないので、その時は食べ物テーブルを参照してほしいですよね。
さらに、「栃木県」と調べた時には産地のデータをもつテーブルを見て欲しかったりもしますよね。
なんとなく複数テーブルを跨いで検索したい状況がわかっていただけたでしょうか?
参考までに簡単なDB設計を載せておきます。
こんな感じで最終的には条件に当てはまるfoodsを見つけるたいわけです。
説明はこんなところにして、次に実際にサンプルコードをお見せします。
(解説はコード内にコメントとして入れておきます。もしそれでもわからない場所があったらブログのコメントやTwitter(@15ito22)で聞いていただければと思います。)
サンプルコード
public static function search($keyword) { //where('value','like','%'.$keyword.'%')でそのテーブル内の //'value'カラムに「$keyword」が含まれるデータを取得します。 //orWhereのorは「または」を意味します。 $query1 = Food::where('name','like','%'.$keyword.'%')->orWhere('description','like','%'.$keyword.'%')->get(); $query2 = Places::where('name','like','%'.$keyword.'%')->get(); $query3 = Category1::where('name','like','%'.$keyword.'%')->get(); $query4 = Category2::where('name','like','%'.$keyword.'%')->get(); //とりあえず空の配列を定義しておきます。 $food_id_array = []; //先ほど取得したデータ達のidを配列に詰めていきます。 foreach($query1 as $q1){ if($q1){ $food_id_array[] = $q1->id; } } //上に同じく $place_id_array = []; foreach($query2 as $q2){ if($q2){ $place_id_array[] = $q2->id; } } //上に同じく $category1_id_array = []; foreach($query3 as $q3){ if($q3){ $category1_id_array[] = $q3->id; } } //上に同じく $category2_id_array = []; foreach($query4 as $q4){ if($q4){ $category2_id_array[] = $q4->id; } } //whereIn('culumn',$array)で$arrayに入っている //idとitemsの各カラムのidを照合して取得できます。 $foods = Food::whereIn('id',$food_id_array)->orWhereIn('place_id',$place_id_array)->orWhereIn('category1_id',$category1_id_array) ->orWhereIn('category2_id',$category2_id_array)->get(); //そして最後に取得したデータ達を返してあげる。 return $foods; }
参考:全100種類!Laravel 5.6のコレクション実例
正直少しわかりにくいですね。。。
なんども言ってますが不明な点がございましたら、コメントかTwitter(@15ito22)にお願い致します。
また、もっと良い書き方があるのを知っている神様がいらっしゃればガツガツ指摘していただければと思います。
本気度が高い人は公式リファレンスを読んだ方がいいかもです。
まとめ
とこんな感じで検索機能の紹介は終わりです。
今まではほとんどありませんでしたが、これからはプログラミング関連の記事を頻繁に投稿しようと考えていますので、ぜひまた来てくださいね。
では、最後までご覧いただきありがとうございました。
この記事が「ためになった」「面白かった!」と思った人はこちらをクリック!!
現在、家庭教師の募集も行っています!気になった方、体験授業の申し込みは下の記事からお願いします!(残り1人分の空きしかありません。体験授業のお申し込みはお早めにお願いします。)
