Home > Enterprise >  How to get an array of country names by an array of their id's for use in country verification
How to get an array of country names by an array of their id's for use in country verification

Time:12-12

I am sure there is a similar question, but I am unsure what to search to find my answer (If you know what I am looking for, please just comment with the link or whatever you do). I need a way to pull all the countries allowed on a particular page (Just the name column in DB) and put it in an array. example:(United States, Canada, New Zealand, etc..) but in the database I have it set up when the pages are created to insert in the DB an array of the id #'s (id column in countries table) works perfectly fine inserts as (1,22,30, etc) 0 is not a countries table row, but I use 0 as the country ID for All Countries. I am just unsure where to start or how to "foreach" this. Here is a little bit of what I am trying to achieve in my Laravel controller:

public function view(Page $page, Request $request)
    {
        // $page->countries = array of country id's (1,12,14,etc)
        // How do i retrieve the country names
        $ip = $request->ip();
        $geo_info = \Location::get($ip);
        $geo_country = $geo_info->country;
        $countries = Country = ??
            
            // How do I add the country names to an array (United States, Mexico, etc)
            // instead of the country id's while keeping the id's so its smaller data in the column for the page countries
        if(in_array($geo_country, $countries)) {
            return view();
        } else {
            return 'Country not allowed.';
        }
    }

How exactly would I format to pull the countries by the IDs and then attach only the country's names column together in an array with ", "?

Sorry if this post is confusing, I am honestly confused myself.

CodePudding user response:

Assuming you have a Country model and corresponding table with country ID and country name, I think you are looking for a simple WHERE IN query, eg:

// $page->countries = string list of country ids "1,2,3 ..."
// Let's convert that to an array and use is in our query
$allowed_countries = explode(',', $page->countries);
$countries = Country::whereIn('id', $allowed_countries)->get();

That should give you a Collection of your allowed countries. Now to check if $geo_country is in that collection (assuming the country name is in a field called name), you can use the contains() Collection method:

if ($countries->pluck('name')->contains($geo_country)) {
    return view();
} else {
    return 'Country not allowed.';
}

CodePudding user response:

Could probably do something like this. Just create a empty array, loop then set the persisting data to that array. Hopefully this gives you an idea.

$countries = array();
foreach($geo_country as $countries) {
 $countries[] = $geo_country;
}
  • Related