getModel($model); if (blank($model)) { return '//'; } $schema = $this->getModelSchema($model); $table = $this->getModelTable($model); $columns = []; foreach ($schema->getColumnListing($table) as $columnName) { if (str($columnName)->endsWith([ '_token', ])) { continue; } if (str($columnName)->contains([ 'password', ])) { continue; } if (str($columnName)->endsWith('_id')) { $guessedRelationshipName = $this->guessBelongsToRelationshipName($columnName, $model); if (filled($guessedRelationshipName)) { $guessedRelationshipTitleColumnName = $this->guessBelongsToRelationshipTitleColumnName($columnName, app($model)->{$guessedRelationshipName}()->getModel()::class); $columnName = "{$guessedRelationshipName}.{$guessedRelationshipTitleColumnName}"; } } $columnData = []; if (in_array($columnName, [ 'id', 'sku', 'uuid', ])) { $columnData['label'] = [Str::upper($columnName)]; } $columns[$columnName] = $columnData; } $output = count($columns) ? '' : '//'; foreach ($columns as $columnName => $columnData) { // Constructor $output .= 'ExportColumn::make(\''; $output .= $columnName; $output .= '\')'; // Configuration foreach ($columnData as $methodName => $parameters) { $output .= PHP_EOL; $output .= ' ->'; $output .= $methodName; $output .= '('; $output .= collect($parameters) ->map(function (mixed $parameterValue, int | string $parameterName): string { $parameterValue = match (true) { /** @phpstan-ignore-next-line */ is_bool($parameterValue) => $parameterValue ? 'true' : 'false', /** @phpstan-ignore-next-line */ is_null($parameterValue) => 'null', is_numeric($parameterValue) => $parameterValue, /** @phpstan-ignore-next-line */ is_array($parameterValue) => '[\'' . implode('\', \'', $parameterValue) . '\']', default => "'{$parameterValue}'", }; if (is_numeric($parameterName)) { return $parameterValue; } return "{$parameterName}: {$parameterValue}"; }) ->implode(', '); $output .= ')'; } // Termination $output .= ','; if (! (array_key_last($columns) === $columnName)) { $output .= PHP_EOL; } } return $output; } }