在 Laravel 中为爱尔兰县播种数据库
admin 阅读:78 2024-07-31
最初发表在我的博客,briandouglas.ie
这是有关如何在数据库中添加按省份分组的爱尔兰县的分步指南。
第 1 步 - 省份迁移
php artisan make:迁移create_provinces_table
我们只需要一个省份的名称。
schema::create('provinces', function (blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); });
第 2 步 - 县迁移
php artisan make:migration create_counties_table
除了名称之外,县还将包含对其所属省份的引用。
schema::create('counties', function (blueprint $table) { $table->id(); $table->string('name'); $table->foreignidfor(province::class); $table->timestamps(); });
第 3 步 - 省份模型
php artisan make:模型省
这里我们添加 name 作为可填写的属性,并与 county 建立 hasmany 关系。
<?php namespace appmodels; use illuminatedatabaseeloquentfactorieshasfactory; use illuminatedatabaseeloquentmodel; use illuminatedatabaseeloquentrelationshasmany; class province extends model { use hasfactory; protected $fillable = ['name']; public function counties(): hasmany { return $this->hasmany(county::class); } }
第 4 步 - 县模型
php artisan make:模型县
这里我们添加name和province_id作为可填写属性,并与province建立belongsto关系。
<?php namespace appmodels; use illuminatedatabaseeloquentfactorieshasfactory; use illuminatedatabaseeloquentmodel; use illuminatedatabaseeloquentrelationsbelongsto; class county extends model { use hasfactory; protected $fillable = ['name', 'province_id']; public function province(): belongsto { return $this->belongsto(province::class); } }
第 5 步 - 省份播种者
php artisan make:seeder provinceseeder
provinceseeder 将为爱尔兰每个省创建记录,并附上相关县。
<?php namespace DatabaseSeeders; use AppModelsProvince; use IlluminateDatabaseConsoleSeedsWithoutModelEvents; use IlluminateDatabaseSeeder; class ProvinceSeeder extends Seeder { /** * Run the database seeds. */ public function run(): void { $irishCounties = [ 'Leinster' => [ 'Carlow', 'Cavan', 'Dublin', 'Kildare', 'Kilkenny', 'Laois', 'Longford', 'Louth', 'Meath', 'Offaly', 'Westmeath', 'Wexford', 'Wicklow' ], 'Munster' => [ 'Clare', 'Cork', 'Kerry', 'Limerick', 'Tippperary', 'Waterford' ], 'Connacht' => [ 'Galway', 'Leitrim', 'Mayo', 'Roscommon', 'Sligo' ], 'Ulster' => [ 'Antrim', 'Armagh', 'Cavan', 'Derry', 'Donegal', 'Down', 'Fermanagh', 'Monaghan', 'Tyrone' ] ]; foreach ($irishCounties as $provinceName => $countyNames) { $province = Province::firstOrCreate(['name' => $provinceName]); foreach ($countyNames as $countyName) { $province->counties()->firstOrCreate(['name' => $countyName]); } } } }
第 6 步 - 运行播种机
php artisan db:seed --class=provinceseeder
由于省份和县不会改变,所以播种器只需要运行一次。
声明
1、部分文章来源于网络,仅作为参考。 2、如果网站中图片和文字侵犯了您的版权,请联系1943759704@qq.com处理!