Search

Laravel 8 - Search value from Json field with Example

post-title

How to search value from JSON field laravel 8 with example. in this article, i will share with you how to make a searchable JSON field in laravel. laravel is provide the "whereJsonContains" function to search on JSON fields in laravel 8.

here we add one "geo_location_info" field add in "users" table and you want to search any of the values from it then it will help you in searching.

JSON Data Example

{
  "ip": "134.201.250.155",
  "hostname": "134.201.250.155",
  "type": "ipv4",
  "continent_code": "NA",
  "continent_name": "North America",
  "country_code": "US",
  "country_name": "United States",
  "region_code": "CA",
  "region_name": "California",
  "city": "Los Angeles",
  "zip": "90013",
  "latitude": 34.0453,
  "longitude": -118.2413,
  "location": {
    "geoname_id": 5368361,
    "capital": "Washington D.C.",
    "languages": [
        {
          "code": "en",
          "name": "English",
          "native": "English"
        }
    ],
    "country_flag": "https://assets.ipstack.com/images/assets/flags_svg/us.svg",
    "country_flag_emoji": "🇺🇸",
    "country_flag_emoji_unicode": "U+1F1FA U+1F1F8",
    "calling_code": "1",
    "is_eu": false
  },
  "time_zone": {
    "id": "America/Los_Angeles",
    "current_time": "2018-03-29T07:35:08-07:00",
    "gmt_offset": -25200,
    "code": "PDT",
    "is_daylight_saving": true
  },
  "currency": {
    "code": "USD",
    "name": "US Dollar",
    "plural": "US dollars",
    "symbol": "$",
    "symbol_native": "$"
  },
  "connection": {
    "asn": 25876,
    "isp": "Los Angeles Department of Water & Power"
  },
  "security": {
    "is_proxy": false,
    "proxy_type": null,
    "is_crawler": false,
    "crawler_name": null,
    "crawler_type": null,
    "is_tor": false,
    "threat_level": "low",
    "threat_types": null
  }
}

How to search in JSON

public function index(Request $request)
{
	$input = request->all();
	$data = User::where('is_delete', '0');
	if(isset($input['country']) && $input['country'] != '') {
		$data = $data->whereJsonContains('geo_location_info->country_code', $input['country']);
	}
	$data = $data->get();

	return view('users.index', compact('data'));
}

i hope you like this small article.