Laravel 12 API Development: Seeders and Data Population Made Easy
Laravel 12: Tutorials, Guides & Best Practices

Laravel 12 API Development: Seeders and Data Population Made Easy

Laravel 12 API Tutorial: Creating and Populating Seeders

Author
Richard Mendes
March 20, 2025 • 8 mins

Laravel Database Seeding: Populating Countries, Categories, and Languages

When building applications with Laravel, especially APIs, you often need to populate your database with initial data. Laravel’s database seeding feature makes this process seamless using seeders. In this tutorial, I will walk you through creating seeders for three common tables, countries, categories, and languages and populate them with data efficiently.

Creating Seeders

Run this command to generate the CountrySeeder:

php artisan make:seeder CountrySeeder

Open database/seeders/CountrySeeder.php and add the following code:

<?php

namespace Database\Seeders;

use App\Models\Country;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class CountrySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run()
{
$countries = [
['name' => 'Afghanistan', 'code' => 'af'],
['name' => 'Albania', 'code' => 'al'],
['name' => 'Algeria', 'code' => 'dz'],
['name' => 'Andorra', 'code' => 'ad'],
['name' => 'Angola', 'code' => 'ao'],
['name' => 'Argentina', 'code' => 'ar'],
['name' => 'Armenia', 'code' => 'am'],
['name' => 'Australia', 'code' => 'au'],
['name' => 'Austria', 'code' => 'at'],
['name' => 'Azerbaijan', 'code' => 'az'],
['name' => 'Bahamas', 'code' => 'bs'],
['name' => 'Bahrain', 'code' => 'bh'],
['name' => 'Bangladesh', 'code' => 'bd'],
['name' => 'Barbados', 'code' => 'bb'],
['name' => 'Belarus', 'code' => 'by'],
['name' => 'Belgium', 'code' => 'be'],
['name' => 'Belize', 'code' => 'bz'],
['name' => 'Benin', 'code' => 'bj'],
['name' => 'Bermuda', 'code' => 'bm'],
['name' => 'Bhutan', 'code' => 'bt'],
['name' => 'Bolivia', 'code' => 'bo'],
['name' => 'Bosnia And Herzegovina', 'code' => 'ba'],
['name' => 'Botswana', 'code' => 'bw'],
['name' => 'Brazil', 'code' => 'br'],
['name' => 'Brunei', 'code' => 'bn'],
['name' => 'Bulgaria', 'code' => 'bg'],
['name' => 'Burkina Faso', 'code' => 'bf'], // Corrected "Burkina fasco" to "Burkina Faso"
['name' => 'Burundi', 'code' => 'bi'],
['name' => 'Cambodia', 'code' => 'kh'],
['name' => 'Cameroon', 'code' => 'cm'],
['name' => 'Canada', 'code' => 'ca'],
['name' => 'Cape Verde', 'code' => 'cv'],
['name' => 'Cayman Islands', 'code' => 'ky'],
['name' => 'Central African Republic', 'code' => 'cf'],
['name' => 'Chad', 'code' => 'td'],
['name' => 'Chile', 'code' => 'cl'],
['name' => 'China', 'code' => 'cn'],
['name' => 'Colombia', 'code' => 'co'],
['name' => 'Comoros', 'code' => 'km'],
['name' => 'Congo', 'code' => 'cg'],
['name' => 'Cook Islands', 'code' => 'ck'],
['name' => 'Costa Rica', 'code' => 'cr'],
['name' => 'Croatia', 'code' => 'hr'],
['name' => 'Cuba', 'code' => 'cu'],
['name' => 'Curaçao', 'code' => 'cw'],
['name' => 'Cyprus', 'code' => 'cy'],
['name' => 'Czech Republic', 'code' => 'cz'],
['name' => 'Denmark', 'code' => 'dk'],
['name' => 'Djibouti', 'code' => 'dj'],
['name' => 'Dominica', 'code' => 'dm'],
['name' => 'Dominican Republic', 'code' => 'do'],
['name' => 'DR Congo', 'code' => 'cd'],
['name' => 'Ecuador', 'code' => 'ec'],
['name' => 'Egypt', 'code' => 'eg'],
['name' => 'El Salvador', 'code' => 'sv'],
['name' => 'Equatorial Guinea', 'code' => 'gq'],
['name' => 'Eritrea', 'code' => 'er'],
['name' => 'Estonia', 'code' => 'ee'],
['name' => 'Eswatini', 'code' => 'sz'],
['name' => 'Ethiopia', 'code' => 'et'],
['name' => 'Fiji', 'code' => 'fj'],
['name' => 'Finland', 'code' => 'fi'],
['name' => 'France', 'code' => 'fr'],
['name' => 'French Polynesia', 'code' => 'pf'],
['name' => 'Gabon', 'code' => 'ga'],
['name' => 'Gambia', 'code' => 'gm'],
['name' => 'Georgia', 'code' => 'ge'],
['name' => 'Germany', 'code' => 'de'],
['name' => 'Ghana', 'code' => 'gh'],
['name' => 'Gibraltar', 'code' => 'gi'],
['name' => 'Greece', 'code' => 'gr'],
['name' => 'Grenada', 'code' => 'gd'],
['name' => 'Guatemala', 'code' => 'gt'],
['name' => 'Guinea', 'code' => 'gn'],
['name' => 'Guyana', 'code' => 'gy'],
['name' => 'Haiti', 'code' => 'ht'],
['name' => 'Honduras', 'code' => 'hn'],
['name' => 'Hong Kong', 'code' => 'hk'],
['name' => 'Hungary', 'code' => 'hu'],
['name' => 'Iceland', 'code' => 'is'],
['name' => 'India', 'code' => 'in'],
['name' => 'Indonesia', 'code' => 'id'],
['name' => 'Iran', 'code' => 'ir'],
['name' => 'Iraq', 'code' => 'iq'],
['name' => 'Ireland', 'code' => 'ie'],
['name' => 'Israel', 'code' => 'il'],
['name' => 'Italy', 'code' => 'it'],
['name' => 'Ivory Coast', 'code' => 'ci'],
['name' => 'Jamaica', 'code' => 'jm'],
['name' => 'Japan', 'code' => 'jp'],
['name' => 'Jersey', 'code' => 'je'],
['name' => 'Jordan', 'code' => 'jo'],
['name' => 'Kazakhstan', 'code' => 'kz'],
['name' => 'Kenya', 'code' => 'ke'],
['name' => 'Kiribati', 'code' => 'ki'],
['name' => 'Kosovo', 'code' => 'xk'],
['name' => 'Kuwait', 'code' => 'kw'],
['name' => 'Kyrgyzstan', 'code' => 'kg'],
['name' => 'Laos', 'code' => 'la'],
['name' => 'Latvia', 'code' => 'lv'],
['name' => 'Lebanon', 'code' => 'lb'],
['name' => 'Lesotho', 'code' => 'ls'],
['name' => 'Liberia', 'code' => 'lr'],
['name' => 'Libya', 'code' => 'ly'],
['name' => 'Liechtenstein', 'code' => 'li'],
['name' => 'Lithuania', 'code' => 'lt'],
['name' => 'Luxembourg', 'code' => 'lu'],
['name' => 'Macau', 'code' => 'mo'],
['name' => 'Macedonia', 'code' => 'mk'],
['name' => 'Madagascar', 'code' => 'mg'],
['name' => 'Malawi', 'code' => 'mw'],
['name' => 'Malaysia', 'code' => 'my'],
['name' => 'Maldives', 'code' => 'mv'],
['name' => 'Mali', 'code' => 'ml'],
['name' => 'Malta', 'code' => 'mt'],
['name' => 'Marshall Islands', 'code' => 'mh'],
['name' => 'Mauritania', 'code' => 'mr'],
['name' => 'Mauritius', 'code' => 'mu'],
['name' => 'Mexico', 'code' => 'mx'],
['name' => 'Micronesia', 'code' => 'fm'],
['name' => 'Moldova', 'code' => 'md'],
['name' => 'Monaco', 'code' => 'mc'],
['name' => 'Mongolia', 'code' => 'mn'],
['name' => 'Montenegro', 'code' => 'me'],
['name' => 'Morocco', 'code' => 'ma'],
['name' => 'Mozambique', 'code' => 'mz'],
['name' => 'Myanmar', 'code' => 'mm'],
['name' => 'Namibia', 'code' => 'na'],
['name' => 'Nauru', 'code' => 'nr'],
['name' => 'Nepal', 'code' => 'np'],
['name' => 'Netherlands', 'code' => 'nl'], // Corrected "Netherland" to "Netherlands"
['name' => 'New Caledonia', 'code' => 'nc'],
['name' => 'New Zealand', 'code' => 'nz'],
['name' => 'Nicaragua', 'code' => 'ni'],
['name' => 'Niger', 'code' => 'ne'],
['name' => 'Nigeria', 'code' => 'ng'],
['name' => 'North Korea', 'code' => 'kp'],
['name' => 'Norway', 'code' => 'no'],
['name' => 'Oman', 'code' => 'om'],
['name' => 'Pakistan', 'code' => 'pk'],
['name' => 'Palau', 'code' => 'pw'],
['name' => 'Palestine', 'code' => 'ps'],
['name' => 'Panama', 'code' => 'pa'],
['name' => 'Papua New Guinea', 'code' => 'pg'],
['name' => 'Paraguay', 'code' => 'py'],
['name' => 'Peru', 'code' => 'pe'],
['name' => 'Philippines', 'code' => 'ph'],
['name' => 'Poland', 'code' => 'pl'],
['name' => 'Portugal', 'code' => 'pt'],
['name' => 'Puerto Rico', 'code' => 'pr'],
['name' => 'Qatar', 'code' => 'qa'],
['name' => 'Romania', 'code' => 'ro'],
['name' => 'Russia', 'code' => 'ru'],
['name' => 'Rwanda', 'code' => 'rw'],
['name' => 'Saint Lucia', 'code' => 'lc'],
['name' => 'Saint Martin (Dutch)', 'code' => 'sx'],
['name' => 'Samoa', 'code' => 'ws'],
['name' => 'San Marino', 'code' => 'sm'],
['name' => 'Sao Tome and Principe', 'code' => 'st'],
['name' => 'Saudi Arabia', 'code' => 'sa'],
['name' => 'Senegal', 'code' => 'sn'],
['name' => 'Serbia', 'code' => 'rs'],
['name' => 'Seychelles', 'code' => 'sc'],
['name' => 'Sierra Leone', 'code' => 'sl'],
['name' => 'Singapore', 'code' => 'sg'],
['name' => 'Slovakia', 'code' => 'sk'],
['name' => 'Slovenia', 'code' => 'si'],
['name' => 'Solomon Islands', 'code' => 'sb'],
['name' => 'Somalia', 'code' => 'so'],
['name' => 'South Africa', 'code' => 'za'],
['name' => 'South Korea', 'code' => 'kr'],
['name' => 'Spain', 'code' => 'es'],
['name' => 'Sri Lanka', 'code' => 'lk'],
['name' => 'Sudan', 'code' => 'sd'],
['name' => 'Suriname', 'code' => 'sr'],
['name' => 'Sweden', 'code' => 'se'],
['name' => 'Switzerland', 'code' => 'ch'],
['name' => 'Syria', 'code' => 'sy'],
['name' => 'Taiwan', 'code' => 'tw'],
['name' => 'Tajikistan', 'code' => 'tj'],
['name' => 'Tanzania', 'code' => 'tz'],
['name' => 'Thailand', 'code' => 'th'],
['name' => 'Timor-Leste', 'code' => 'tl'],
['name' => 'Togo', 'code' => 'tg'],
['name' => 'Tonga', 'code' => 'to'],
['name' => 'Trinidad and Tobago', 'code' => 'tt'],
['name' => 'Tunisia', 'code' => 'tn'],
['name' => 'Turkey', 'code' => 'tr'],
['name' => 'Turkmenistan', 'code' => 'tm'],
['name' => 'Tuvalu', 'code' => 'tv'],
['name' => 'Uganda', 'code' => 'ug'],
['name' => 'Ukraine', 'code' => 'ua'],
['name' => 'United Arab Emirates', 'code' => 'ae'],
['name' => 'United Kingdom', 'code' => 'gb'],
['name' => 'United States of America', 'code' => 'us'],
['name' => 'Uruguay', 'code' => 'uy'],
['name' => 'Uzbekistan', 'code' => 'uz'],
['name' => 'Vanuatu', 'code' => 'vu'],
['name' => 'Vatican', 'code' => 'va'],
['name' => 'Venezuela', 'code' => 've'],
['name' => 'Vietnam', 'code' => 'vi'],
['name' => 'Virgin Islands (British)', 'code' => 'vg'],
['name' => 'World', 'code' => 'wo'], // Note: "World" is not a standard country, consider removing if not needed
['name' => 'Yemen', 'code' => 'ye'],
['name' => 'Zambia', 'code' => 'zm'],
['name' => 'Zimbabwe', 'code' => 'zw'],
];

foreach ($countries as $country) {
Country::create($country);
}
}
}

Category Seeder

Generate the CategorySeeder:

php artisan make:seeder CategorySeeder

Edit database/seeders/CategorySeeder.php:

<?php

namespace Database\Seeders;

use App\Models\Category;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class CategorySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run()
{
$categories = [
['name' => 'business'],
['name' => 'crime'],
['name' => 'domestic'],
['name' => 'education'],
['name' => 'entertainment'],
['name' => 'environment'],
['name' => 'food'],
['name' => 'health'],
['name' => 'lifestyle'],
['name' => 'other'],
['name' => 'politics'],
['name' => 'science'],
['name' => 'sports'],
['name' => 'technology'],
['name' => 'top'],
['name' => 'tourism'],
['name' => 'world'],
];

foreach ($categories as $category) {
Category::create($category);
}
}
}

Language Seeder

Create the LanguageSeeder:

php artisan make:seeder LanguageSeeder

Update database/seeders/LanguageSeeder.php:

<?php

namespace Database\Seeders;

use App\Models\Language;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class LanguageSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$languages = [
['name' => 'Afrikaans', 'code' => 'af'],
['name' => 'Albanian', 'code' => 'sq'],
['name' => 'Amharic', 'code' => 'am'],
['name' => 'Arabic', 'code' => 'ar'],
['name' => 'Armenian', 'code' => 'hy'],
['name' => 'Assamese', 'code' => 'as'],
['name' => 'Azerbaijani', 'code' => 'az'],
['name' => 'Bambara', 'code' => 'bm'],
['name' => 'Basque', 'code' => 'eu'],
['name' => 'Belarusian', 'code' => 'be'],
['name' => 'Bengali', 'code' => 'bn'],
['name' => 'Bosnian', 'code' => 'bs'],
['name' => 'Bulgarian', 'code' => 'bg'],
['name' => 'Burmese', 'code' => 'my'],
['name' => 'Catalan', 'code' => 'ca'],
['name' => 'Central Kurdish', 'code' => 'ckb'],
['name' => 'Chinese', 'code' => 'zh'],
['name' => 'Croatian', 'code' => 'hr'],
['name' => 'Czech', 'code' => 'cs'],
['name' => 'Danish', 'code' => 'da'],
['name' => 'Dutch', 'code' => 'nl'],
['name' => 'English', 'code' => 'en'],
['name' => 'Estonian', 'code' => 'et'],
['name' => 'Filipino', 'code' => 'pi'],
['name' => 'Finnish', 'code' => 'fi'],
['name' => 'French', 'code' => 'fr'],
['name' => 'Galician', 'code' => 'gl'],
['name' => 'Georgian', 'code' => 'ka'],
['name' => 'German', 'code' => 'de'],
['name' => 'Greek', 'code' => 'el'],
['name' => 'Gujarati', 'code' => 'gu'],
['name' => 'Hausa', 'code' => 'ha'],
['name' => 'Hebrew', 'code' => 'he'],
['name' => 'Hindi', 'code' => 'hi'],
['name' => 'Hungarian', 'code' => 'hu'],
['name' => 'Icelandic', 'code' => 'is'],
['name' => 'Indonesian', 'code' => 'id'],
['name' => 'Italian', 'code' => 'it'],
['name' => 'Japanese', 'code' => 'jp'],
['name' => 'Kannada', 'code' => 'kn'],
['name' => 'Kazakh', 'code' => 'kz'],
['name' => 'Khmer', 'code' => 'kh'],
['name' => 'Kinyarwanda', 'code' => 'rw'],
['name' => 'Korean', 'code' => 'ko'],
['name' => 'Kurdish', 'code' => 'ku'],
['name' => 'Latvian', 'code' => 'lv'],
['name' => 'Lithuanian', 'code' => 'lt'],
['name' => 'Luxembourgish', 'code' => 'lb'],
['name' => 'Macedonian', 'code' => 'mk'],
['name' => 'Malay', 'code' => 'ms'],
['name' => 'Malayalam', 'code' => 'ml'],
['name' => 'Maltese', 'code' => 'mt'],
['name' => 'Maori', 'code' => 'mi'],
['name' => 'Marathi', 'code' => 'mr'],
['name' => 'Mongolian', 'code' => 'mn'],
['name' => 'Nepali', 'code' => 'ne'],
['name' => 'Norwegian', 'code' => 'no'],
['name' => 'Oriya', 'code' => 'or'],
['name' => 'Pashto', 'code' => 'ps'],
['name' => 'Persian', 'code' => 'fa'],
['name' => 'Polish', 'code' => 'pl'],
['name' => 'Portuguese', 'code' => 'pt'],
['name' => 'Punjabi', 'code' => 'pa'],
['name' => 'Romanian', 'code' => 'ro'],
['name' => 'Russian', 'code' => 'ru'],
['name' => 'Samoan', 'code' => 'sm'],
['name' => 'Serbian', 'code' => 'sr'],
['name' => 'Shona', 'code' => 'sn'],
['name' => 'Sindhi', 'code' => 'sd'],
['name' => 'Sinhala', 'code' => 'si'],
['name' => 'Slovak', 'code' => 'sk'],
['name' => 'Slovenian', 'code' => 'sl'],
['name' => 'Somali', 'code' => 'so'],
['name' => 'Spanish', 'code' => 'es'],
['name' => 'Swahili', 'code' => 'sw'],
['name' => 'Swedish', 'code' => 'sv'],
['name' => 'Tajik', 'code' => 'tg'],
['name' => 'Tamil', 'code' => 'ta'],
['name' => 'Telugu', 'code' => 'te'],
['name' => 'Thai', 'code' => 'th'],
['name' => 'Traditional Chinese', 'code' => 'zht'],
['name' => 'Turkish', 'code' => 'tr'],
['name' => 'Turkmen', 'code' => 'tk'],
['name' => 'Ukrainian', 'code' => 'uk'],
['name' => 'Urdu', 'code' => 'ur'],
['name' => 'Uzbek', 'code' => 'uz'],
['name' => 'Vietnamese', 'code' => 'vi'],
['name' => 'Welsh', 'code' => 'cy'],
['name' => 'Zulu', 'code' => 'zu'],
];

foreach ($languages as $language) {
Language::create($language);
}

}
}

Enhancing with Eloquent

Creating Models for the above seeders

php artisan make:model Country
php artisan make:model Language
php artisan make:model Category

Country Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;


class Country extends Model
{
use SoftDeletes;
protected $fillable = ['name', 'code'];
}
?>

Category Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Category extends Model
{
use SoftDeletes;
protected $fillable = ['name'];
}
?>

Language Model

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Language extends Model
{
use SoftDeletes;
protected $fillable = ['name', 'code'];
}
?>

Populate the database with seeders data

Run the following commands to populate the database:

php artisan db:seed --class=CountrySeeder
php artisan db:seed --class=CategorySeeder
php artisan db:seed --class=LanguageSeeder





Latest Articles