Merhabalar, mevcut veritabanımızdan seed oluştrabilmek için Allah'ın izni ile bir class yazdım. Model kullanılarak çalışıyor. Muhakkak bug'ları, eksikleri veya hataları vardır.
<?php
namespace App\MyClasses;
class MySeedMaker {
private $columns;
public function except($_columns){
$_if_state = null;
foreach($_columns as $_column){
$_if_state .= '$_key === "'.$_column.'" || ';
}
$this->columns = mb_substr($_if_state,0,-4);
return $this;
}
public function make($_model,$_soft_deletes){
if($_soft_deletes==true){
//deleted_at sütunu varsa.
$_result = $_model::withTrashed()->get();
}else{
//deleted_at sütunu yoksa.
$_result = $_model::all();
}
$_row=null;
foreach ($_result as $_data){
$_row .= "<li>[";
foreach($_data->toArray() as $_key=>$_item){
// ' " işaretleri seed kısmını bozmasın diye addslashes ekledik.
$_modify_item = htmlentities(addslashes($_item));
//string ifadenin php kodu olarak çalışması için eval kullandık.
if(eval("return $this->columns;")){
// timestamp sütunlarında gelen veride format sıkıntısı halen var.
continue;
}else{
$_row .= "'$_key'=>'$_modify_item',";
}
}
// ',]' her rowdaki , kısmını silmek için kullandık.
$_row = mb_substr($_row,0,-1);
$_row .= "],</li>";
}
echo $_row;
}
}
Örnek Kullanım Şekilleri
$_new_seed_maker = new MySeedMaker();
$_new_seed_maker->except(['id','created_at','updated_at','deleted_at'])->make('\App\Category',true);
Saygılar
Edit 2: except kullanarak dilediğiniz sütunu çıkarabilirsiniz.
Edit 3 : $_modify_item = htmlentities(addslashes($_item));
şeklinde düzeltilmiştir.