Create Seeder Command for existing table in laravel

<?php

namespace App\Console\Commands;

use App\Models\Country;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Storage;

class CreateSeeder extends Command
{
const VAR_NAME = '$data';
const MODEL_NAME ='Country';
const KEY_NAME = '$d';
const RULE_KEY_NAME = "'name'";
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'createSeeder';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';

/**
* Execute the console command.
*/
private function Model(){
return new Country();
}


private function isInt($column){
$data_type =$this->getTypeOfColumn($column);
return ($data_type=='int' || $data_type=='smallint'
||$data_type=='integer' ||$data_type=='bigint')?true:false;
}

private function getTypeOfColumn($column){
$table = $this->Model()->getTable();
return Schema::getColumnType($table, $column);
}

private function getSeederName(){
return "seeder/".self::MODEL_NAME."Seeder.php";
}


private function getData(){
$model_data = $this->model()->get();
$columns = $this->model()->getFillable();
$text ='';
foreach($model_data as $data){
$text.= "[\n";
foreach($columns as $column){
$value = addslashes($data->$column);
$value = ($value=='')?0:$value;
if($this->isInt($column)){
$text.= "'$column' => $value,\n";

}else{
$text.= "'$column' => '$value',\n";
}
}
$text.="],\n";
}
return self::VAR_NAME."=[\n $text \n];";
}

private function generateSeeder(string $model_use_location,
string $data, string $var,string $model_name,string $rule, string $d){
return "<?php
namespace Database\Seeders;
$model_use_location;
use Illuminate\Database\Seeder;
class CountrySeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$data
foreach($var as $d)
{
$model_name::updateOrCreate($rule,$d);
}
}
}";
}

private function CreateSeeder(){
$d= self::KEY_NAME;
$var = self::VAR_NAME;
$model_name = self::MODEL_NAME;
$rule_key = self::RULE_KEY_NAME;
$rule ="[$rule_key=>".$d."[$rule_key]]";
$data = $this->getData();
$model_use_location="use App\Models\\$model_name";
return $this->generateSeeder($model_use_location,$data,$var,
$model_name,$rule,$d);
}

private function writeSeeder(){
$file_name = $this->getSeederName();
Storage::put($file_name,$this->CreateSeeder());
}

public function handle()
{
$this->writeSeeder();
$this->info("working");
}
}

Comments