J'essaie d'autoriser les utilisateurs à télécharger Excel, en utilisant des fichiers Laravel Excel contenant des informations sur le produit. Mon itinéraire Web actuel ressemble à ceci:
1 150 1 3 2019-01-16 16:37:25 2019-01-16 16:37:25 10
Mon exportation actuelle ressemble à ceci:
public function create(Request $request) { # Only alowed tables $alias = [ 'product_list' => ProductExport::class ]; # Ensure request has properties if(!$request->has('alias') || !$request->has('id')) return Redirect::back()->withErrors(['Please fill in the required fields.'])->withInput(); # Ensure they can use this if(!in_array($request->alias, array_keys($alias))) return Redirect::back()->withErrors(['Alias ' . $request->alias . ' is not supported'])->withInput(); # Download return (new ProductExport((int) $request->id))->download('iezon_solutions_' . $request->alias . '_' . $request->id . '.xlsx'); }
Mon contrôleur actuel ressemble à ceci: p>
class ProductExport implements FromQuery { use Exportable; public function __construct(int $id) { $this->id = $id; } public function query() { return ProductList::query()->where('id', $this->id); } }
Lorsque je me dirige vers https://example.com/excel/release?alias=product_list&id=1
cela s'exécute correctement et renvoie un fichier Excel . Cependant, il n'y a pas d'en-tête de colonne pour les lignes. Les données sortent comme ceci:
Route::get('/excel/release', 'ExcelController@create')->name('Create Excel');
Cependant, cela devrait contenir des en-têtes de colonne comme ID, coût, etc. p>
4 Réponses :
Selon la documentation vous pouvez modifier votre classe pour utiliser l'interface WithHeadings
, puis définir la fonction headings
pour renvoyer un tableau d'en-têtes de colonne:
<?php namespace App; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithHeadings; class ProductExport implements FromQuery, WithHeadings { use Exportable; public function __construct(int $id) { $this->id = $id; } public function query() { return ProductList::query()->where('id', $this->id); } public function headings() { return ["your", "headings", "here"]; } }
Cela fonctionne avec tous les types d'export ( FromQuery
, FromCollection
, etc.)
Merci pour cela! Existe-t-il un moyen d'utiliser Eloquent pour obtenir les colonnes de la base de données de manière dynamique? J'accepterai dès que possible!
Si vous exportez toutes les colonnes du tableau: stackoverflow.com/a/37157879/1255289
comment appeler la méthode des titres dans le contrôleur?
@ miken32 Existe-t-il un moyen de passer le tableau aux en-têtes à partir des fonctions query
ou au moins de le mettre à jour et de le rendre disponible sur les en-têtes. En fait, je n'ai besoin d'ajouter des titres que s'il y a des données sur cette colonne. Alors, y a-t-il une solution de contournement pour cela?
C'est une fonction. Vous pouvez faire ce que vous voulez avec @SarojShrestha. Regardez le code de la classe, il est probable que les données soient une propriété à laquelle vous pouvez accéder.
<?php namespace App\Exports; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; use DB; class LocationTypeExport implements FromCollection,WithHeadings { public function collection() { $type = DB::table('location_type')->select('id','name')->get(); return $type ; } public function headings(): array { return [ 'id', 'name', ]; } }
Cela n'a fonctionné qu'avec: array pour moi, probablement à cause d'une version plus récente.
<?php namespace App\Exports; use App\Models\UserDetails; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\FromQuery; use Maatwebsite\Excel\Concerns\WithHeadings; class CustomerExport implements FromCollection, WithHeadings { public function collection() { return UserDetails::whereNull('business_name') ->select('first_name','last_name','mobile_number','dob','gender') ->get(); } public function headings() :array { return ["First Name", "Last Name", "Mobile","DOB", "Gender"]; } }
Ce code fonctionne pour moi
use App\Newsletter; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class NewsletterExport implements FromCollection, WithHeadings { public function headings(): array { return [ 'Subscriber Id', 'Name', 'Email', 'Created_at', ]; } public function collection() { return Newsletter::where('isSubscribed', true)->get(['id','name','email','created_at']); } }