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.
<?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);
}
}
}
<?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);
}
}
}