У меня есть данные, а именно:
- города
- населенные пункты в каждом городе
- тип населенного пункта
Мне нужно наполнить базу таким образом, чтобы населенный пункт быть привязан к конкретному городу по его id. База должна наполнятся реальными данными, а не с помощью факера.
В теории, я бы мог сделать что-то вроде:
<?php
namespace Database\Seeders;
use App\Models\Locality;
use App\Models\LocalityType;
use App\Models\RegionalCenter;
use Illuminate\Database\Seeder;
class LocalitySeeder extends Seeder
{
public $localities = [
[
'name' => 'Населенный пункт 1',
'type' => 'Название типа 1',
'region' => 'Название обл. 1'
],
[
'name' => 'Населенный пункт 2',
'type' => 'Название типа 2',
'region' => 'Название обл. 2'
]
];
public function run()
{
foreach($this->localities as $locality){
Locality::insert([
'name' => $locality['name'],
'regional_center_id' => function() use($locality){
return RegionalCenter::findOrCreate(['name' => $locality['region']])->id;
},
'locality_type_id' => function() use($locality){
return LocalityType::findOrCreate(['name' => $locality['type']])->id;
}
]);
}
}
}
Но что-то мне подсказывает что так не гуд. Как это сделать правильно?
Либо формат данных еще может быть такой, в зависимости от оптимального решения задачи
public $regional_centers = [
[
'name' => 'Название обл. 1',
'localities' => [
[
'name' => 'Населенный пункт 1',
'type' => 'Название типа 1'
]
]
],
[
'name' => 'Название обл. 2',
'localities' => [
[
'name' => 'Населенный пункт 2',
'type' => 'Название типа 2'
]
]
],
];