Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

mozziehin's avatar

Export Data into excel using raw query

Hi there, I am trying to explore "maatwebsite/excel" using raw query. I am having problem doing it and I am not sure whether I am doing it correctly or not. Or many maatwebsite does not support raw query statement to export to excel format. Here are my existing code. Thanks for the help in advance.

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Facades\DB;

class PaidExport implements FromCollection
{
    /**
     * @return \Illuminate\Support\Collection
     * 
     * 
     */
    public function collection()
    {
        $results = DB::select(DB::raw("select o.order_no,
        o.invoice_no,
        bs.name,
        p.name,
        op.quantity,
        op.total_price as package_total_amount,
        o.delivery_status,
        o.shipping_amount,
        o.total_amount,
        o.payment_status,
        o.remarks,
        from_unixtime(o.payment_at),
        from_unixtime(delivered_at),
        c.fb_name,
        da.contact_person,
        da.contact_no,
        da.address_1,
        da.postcode,
        da.city,
        da.state
        FROM
        orders o
        inner join customers c on c.id = o.customer_id
        inner join delivery_addresses da on da.id = o.delivery_address_id
        inner join bid_sessions bs on bs.id = o.bid_session_id
        inner join order_package op on op.order_id = o.id
        inner join packages p on p.id = op.package_id
        where
        payment_status = 'paid'
        and from_unixtime(o.payment_at) > DATE_SUB(now(), INTERVAL 1 MONTH)"));


        return $results;
    }
}

My controller

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Exports\PaidExport;
use Maatwebsite\Excel\Facades\Excel;

class ExportController extends Controller
{
    public function showIndexPage()
    {
        return view('admin.export.view');
    }

    public function showPaidPage()
    {
        return view('admin.export.paid');
    }

    public function showStockOutPage()
    {
        return view('admin.export.stock');
    }

    public function exportPaid()
    {
        return Excel::download(new PaidExport, 'paid.xlsx');
    }
}
0 likes
4 replies
mozziehin's avatar

Once I write the code, I get an error saying "Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR) Call to a member function all() on array"

Viktor S's avatar

public function collection() { $result = DB::select( ............ ......................... return collect($result); }

kevinbui's avatar

I think if you want to export data from a database query, you got to implement the FromQuery interface and return a query instance:

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromQuery;
use Illuminate\Support\Facades\DB;

class PaidExport implements FromQuery
{
    public function query()
    {
        return DB::select(...);
    }

You can still use the FromCollection interface, but a collection got to be returned:

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Support\Facades\DB;

class PaidExport implements FromCollection
{
    public function collection()
    {
        return DB::select(...)->get();
    }
Sinnbeck's avatar

Just wrap the return in a collect() call to make it a collection

return collect($results);

Please or to participate in this conversation.