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); } } }