argument('classname');
$exceptFields = [];
$exportUsers = $this->option('users');
$namespace = version_compare(app()->version(), '8.0.0', '<') ? 'seeds' : 'seeders';
$seedFile = $this->laravel->databasePath().'/'.$namespace.'/'.$name.'.php';
$contents = $this->getStub('AdminTablesSeeder');
$replaces = [
'DummyNamespace' => ucwords($namespace),
'DummyClass' => $name,
'ClassMenu' => config('admin.database.menu_model'),
'ClassPermission' => config('admin.database.permissions_model'),
'ClassRole' => config('admin.database.roles_model'),
'TableRoleMenu' => config('admin.database.role_menu_table'),
'TableRolePermissions' => config('admin.database.role_permissions_table'),
'ArrayMenu' => $this->getTableDataArrayAsString(config('admin.database.menu_table'), $exceptFields),
'ArrayPermission' => $this->getTableDataArrayAsString(config('admin.database.permissions_table'), $exceptFields),
'ArrayRole' => $this->getTableDataArrayAsString(config('admin.database.roles_table'), $exceptFields),
'ArrayPivotRoleMenu' => $this->getTableDataArrayAsString(config('admin.database.role_menu_table'), $exceptFields),
'ArrayPivotRolePermissions' => $this->getTableDataArrayAsString(config('admin.database.role_permissions_table'), $exceptFields),
];
if ($exportUsers) {
$replaces = array_merge($replaces, [
'ClassUsers' => config('admin.database.users_model'),
'TableRoleUsers' => config('admin.database.role_users_table'),
'TablePermissionsUsers' => config('admin.database.user_permissions_table'),
'ArrayUsers' => $this->getTableDataArrayAsString(config('admin.database.users_table'), $exceptFields),
'ArrayPivotRoleUsers' => $this->getTableDataArrayAsString(config('admin.database.role_users_table'), $exceptFields),
'ArrayPivotPermissionsUsers' => $this->getTableDataArrayAsString(config('admin.database.user_permissions_table'), $exceptFields),
]);
} else {
$contents = preg_replace('/\/\/ users tables[\s\S]*?(?=\/\/ finish)/mu', '', $contents);
}
$contents = str_replace(array_keys($replaces), array_values($replaces), $contents);
$this->laravel['files']->put($seedFile, $contents);
$this->line('Admin tables seed file was created: '.str_replace(base_path(), '', $seedFile));
$this->line("Use: php artisan db:seed --class={$name}");
}
/**
* Get data array from table as string result var_export.
*
* @param string $table
* @param array $exceptFields
*
* @return string
*/
protected function getTableDataArrayAsString($table, $exceptFields = [])
{
$fields = \DB::getSchemaBuilder()->getColumnListing($table);
$fields = array_diff($fields, $exceptFields);
$array = \DB::table($table)->get($fields)->map(function ($item) {
return (array) $item;
})->all();
return $this->varExport($array, str_repeat(' ', 12));
}
/**
* Get stub contents.
*
* @param $name
*
* @return string
*/
protected function getStub($name)
{
return $this->laravel['files']->get(__DIR__."/stubs/$name.stub");
}
/**
* Custom var_export for correct work with \r\n.
*
* @param $var
* @param string $indent
*
* @return string
*/
protected function varExport($var, $indent = '')
{
switch (gettype($var)) {
case 'string':
return '"'.addcslashes($var, "\\\$\"\r\n\t\v\f").'"';
case 'array':
$indexed = array_keys($var) === range(0, count($var) - 1);
$r = [];
foreach ($var as $key => $value) {
$r[] = "$indent "
.($indexed ? '' : $this->varExport($key).' => ')
.$this->varExport($value, "{$indent} ");
}
return "[\n".implode(",\n", $r)."\n".$indent.']';
case 'boolean':
return $var ? 'true' : 'false';
case 'integer':
case 'double':
return $var;
default:
return var_export($var, true);
}
}
}