Reputation: 81
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
I don't want the last column (distance) in export file. Help me how to solve this.
Upvotes: 1
Views: 1277
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