Laravel 12 API Tutorial: Creating and Populating Seeders
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);
}
}
}