user6085744
user6085744

Reputation: 81

Issue in Excel export using laravel

I have created a excel exporting system using laravel Maatwebsite v3 and vuejs for listing users near by postcode which is enter by admin.

Controller

public function export(Request $request)
{
    $file_name='frineds_'.date("d-m-Y h:i").'.csv';
    return Excel::download(new FriendExport($request['postcode'],$request['miles']), $file_name);
}

FriendImport.php

namespace App\Exports;
use App\Models\Friend;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Illuminate\Support\Facades\DB;
class FriendExport implements FromCollection,WithHeadings
{
    function __construct($postcode,$miles) 
    {
      $this->postcode    = $postcode;
      $this->miles = $miles;
    }
    public function headings(): array
    { 
        return ['UNIQUE-ID','PHONE', 'POSTCODE'];
    }

public function collection()
{
    #get lat and log based on post coede
    $url = "https://api.postcodes.io/postcodes/".trim($this->postcode);
    $result_string = file_get_contents($url);
    $result = json_decode($result_string, true);
    $latitude  = $result['result']['latitude'];
    $longitude = $result['result']['longitude'];
    $location_details_qry = DB::table("friends")
    ->select(
    'friends.unique_id',
    'friends.phone',
    'friends.postcode',
    DB::raw("6371 * acos(cos(radians('" . $latitude . "'))
    * cos(radians(friends.latitude))
    * cos(radians(friends.longitude) - radians('" . $longitude . "'))
    + sin(radians('" . $latitude . "'))
    * sin(radians(friends.latitude))) AS distance")
    ) ->havingRaw('distance<'.$this->miles)->orderBy('distance', 'asc');
    return $location_details_qry->get();
}

}

export.csv

enter image description here

I don't want the last column (distance) in export file. Help me how to solve this.

Upvotes: 1

Views: 1277

Answers (1)

hocza
hocza

Reputation: 48

You can map the rows. (https://docs.laravel-excel.com/3.1/exports/mapping.html#mapping-rows)

To do so, your Class needs to implement WithMapping

namespace App\Exports;
use App\Models\Friend;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\WithMapping;
class FriendExport implements FromCollection, WithHeadings, WithMapping
{
    function __construct($postcode,$miles) 
    {
      $this->postcode    = $postcode;
      $this->miles = $miles;
    }
    public function headings(): array
    { 
        return ['UNIQUE-ID','PHONE', 'POSTCODE'];
    }

public function collection()
{
    #get lat and log based on post coede
    $url = "https://api.postcodes.io/postcodes/".trim($this->postcode);
    $result_string = file_get_contents($url);
    $result = json_decode($result_string, true);
    $latitude  = $result['result']['latitude'];
    $longitude = $result['result']['longitude'];
    $location_details_qry = DB::table("friends")
    ->select(
    'friends.unique_id',
    'friends.phone',
    'friends.postcode',
    DB::raw("6371 * acos(cos(radians('" . $latitude . "'))
    * cos(radians(friends.latitude))
    * cos(radians(friends.longitude) - radians('" . $longitude . "'))
    + sin(radians('" . $latitude . "'))
    * sin(radians(friends.latitude))) AS distance")
    ) ->havingRaw('distance<'.$this->miles)->orderBy('distance', 'asc');
    return $location_details_qry->get();
}

public function map($row): array
{
    return [
        $row->unique_id,
        $row->phone,
        $row->postcode
    ];
}

Upvotes: 1

Related Questions