feat: Add AreaGeoSeeder for importing geographic data from external database

- Create AreaGeoSeeder to import area geo data from external zones table
- Add field mapping: zonecode→AreaCode, zoneclass→Class, zonename→AreaName, parentzoneid→Parent
- Support same-server external databases using direct SQL queries
- Register seeder in DBSeeder for inclusion in main seeding workflow
This commit is contained in:
mahdahar 2026-01-07 08:59:36 +07:00
parent 624ce828fd
commit a2097ade6a
2 changed files with 47 additions and 2 deletions

View File

@ -0,0 +1,42 @@
<?php
namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class AreaGeoSeeder extends Seeder
{
/**
* External database configuration (same server)
*/
protected string $externalDbName = 'crm_v2';
public function run()
{
// Query external database directly using database.table syntax
$externalData = $this->db->query(
"SELECT zonecode, zoneclass, zonename, parentzoneid FROM {$this->externalDbName}.zones ORDER BY zoneid ASC"
)->getResultArray();
if (empty($externalData)) {
echo "No data found in external database.\n";
return;
}
// Prepare data for insertion (exclude AreaGeoID to allow auto-increment)
$data = [];
foreach ($externalData as $row) {
$data[] = [
'AreaCode' => $row['zonecode'],
'Class' => $row['zoneclass'],
'AreaName' => $row['zonename'],
'Parent' => $row['parentzoneid'],
];
}
// Insert into local database
$this->db->table('areageo')->insertBatch($data);
echo "Successfully seeded " . count($data) . " area geo records.\n";
}
}

View File

@ -4,14 +4,17 @@ namespace App\Database\Seeds;
use CodeIgniter\Database\Seeder;
class DBSeeder extends Seeder {
public function run() {
class DBSeeder extends Seeder
{
public function run()
{
$this->call('ValueSetSeeder');
$this->call('ValueSetCountrySeeder');
$this->call('OrganizationSeeder');
$this->call('CounterSeeder');
$this->call('ContactSeeder');
$this->call('LocationSeeder');
$this->call('AreaGeoSeeder');
$this->call('SpecimenSeeder');
$this->call('TestSeeder');
$this->call('PatientSeeder');