0

I want to export only filtered data in view blade. I am using Laravel 7 and maatwebsite/excel 3.1 and PHP 7.4.2.

I went through the documentation and applied this:

View

<a href="{!! route('users.export-filter') !!}" class="btn btn-success">
    <i class="la la-download"></i>
    Export Filter
</a>

web.php

Route::get('/users/export-filter', 'Admin\UserController@filter')->name('users.export-filter');

UserController.php

public function filter()
{
    return Excel::download(new FilterUserExport, 'filter.xlsx');
}

FilterUserExport.php

<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use Modules\User\Entities\User;
use Illuminate\Contracts\View\View;

class FilterUserExport implements FromView, ShouldAutoSize, WithEvents
{
    /**
     * @return View
     */
    public function view(): View
    {
        $users = app(User::class)->newQuery();

        if ( request()->has('search') && !empty(request()->get('search')) ) {
            $search = request()->query('search');
            $users->where(function ($query) use($search) {
                $query->where('first_name', 'LIKE', "%{$search}%")
                    ->orWhere('last_name', 'LIKE', "%{$search}%")
                    ->orWhere('email', 'LIKE', "%{$search}%")
                    ->orWhere('mobile', 'LIKE', "%{$search}%");
            });
        }
        return view('users.index', compact('users'));
    }

    /**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function(AfterSheet $event) {
                $event->sheet->getDelegate()->setRightToLeft(true);
            },
        ];
    }
}

index.blade.php

@extends("admin-panel.layouts.master")
@section("content")
    <div class="content-body">
        <section class="grid-with-inline-row-label" id="grid-with-inline-row-label">

            <div class="row">
                <div class="col-12">
                    <div class="card">
                        <div class="card-header">
                            <h4 class="card-title">
                                <a data-action="collapse">
                                    <i class="ft-plus mr-1"></i>
                                    ثبت فیلتر
                                </a>
                            </h4>
                            <a class="heading-elements-toggle"><i class="ft-align-justify font-medium-3"></i></a>
                            <div class="heading-elements">
                                <ul class="list-inline mb-0">
                                    <li><a data-action="collapse"><i class="ft-plus"></i></a></li>
                                    <li><a data-action="reload"><i class="ft-rotate-cw"></i></a></li>
                                    <li><a data-action="expand"><i class="ft-maximize"></i></a></li>
                                    <li><a data-action="close"><i class="ft-x"></i></a></li>
                                </ul>
                            </div>
                        </div>
                        <div class="card-content collapse @if( $errors->any() ) show @endif">
                            <div class="card-body">
                                <form action="{!! route('admin::users.index') !!}" method="get">
                                    <div class="form-body">

                                        <div class="row">
                                            <div class="col-6 form-group">
                                                <label for="search">جستجو</label>
                                                <input type="text" name="search" id="search" class="form-control"
                                                       placeholder="جستجو..."
                                                       aria-label="جستجو" value="{{ request()->query('search') }}">
                                            </div>

                                            <div class="col-6 form-group">
                                                <label for="user_type">گروه کاربری</label>
                                                <select id="user_type" name="user_type" class="form-control">
                                                    <option value="" {{ (request()->query('user_type') == '')? "selected" : "" }}>-</option>
                                                    <option value="is_special" {{ (request()->query('user_type') == 'is_special')? "selected" : "" }}>کاربر ویژه</option>
                                                    <option value="is_user" {{ (request()->query('user_type') == 'is_user')? "selected" : "" }}>کاربر عادی</option>
                                                    <option value="is_admin" {{ (request()->query('user_type') == 'is_admin')? "selected" : "" }}>مدیریت سیستم</option>
                                                </select>
                                            </div>

                                            <div class="col-6 form-group">
                                                <label for="target">فیلتر کاربران</label>
                                                <select id="target" name="target" class="form-control">
                                                    <option value="" {{ (request()->query('target') == '')? "selected" : "" }}>-</option>
                                                    <option value="active" {{ (request()->query('target') == 'active')? "selected" : "" }}>کاربر ویژه</option>
                                                    <option value="orderedAtLeastOnce" {{ (request()->query('target') == 'orderedAtLeastOnce')? "selected" : "" }}>کاربر عادی</option>
                                                    <option value="orderedInLastMonth" {{ (request()->query('target') == 'orderedInLastMonth')? "selected" : "" }}>مدیریت سیستم</option>
                                                    <option value="neverOrdered" {{ (request()->query('target') == 'neverOrdered')? "selected" : "" }}>مدیریت سیستم</option>
                                                </select>
                                            </div>

                                            <div class="col-md-6 form-group">
                                                <label for="categoryId">دسته بندی</label>

                                                {!! Form::select('categoryId', \Modules\Category\Entities\Category::whereNull('parentId')->get()->pluck('title', 'id')->toArray(), null, [
                                                      'class' => 'form-control',
                                                      'id' => 'categoryId',
                                                      'placeholder' => 'انتخاب دسته بندی',
                                                  ]) !!}
                                            </div>
                                        </div>
                                        <div class="d-flex justify-content-between form-actions pb-0">
                                            <div>
                                                <button type="submit" class="btn btn-primary">ارسال <i class="ft-send position-right"></i>
                                                </button>
                                                <button type="reset" class="btn btn-warning">ریست <i class="ft-refresh-cw position-right"></i>
                                                </button>
                                            </div>
                                            <div>
                                                <a href="{!! route('admin::users.export-excel') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    صادر
                                                </a>
                                                <a href="{!! route('admin::users.export-filter') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    Export Filter
                                                </a>
                                                <a href="{!! route('admin::users.export-special-excel') !!}" class="btn btn-success">
                                                    <i class="la la-download"></i>
                                                    صدور کاربران ویژه
                                                </a>
                                                <a href="{!! route('admin::users.import-excel') !!}" class="btn btn-primary">
                                                    <i class="la la-cloud-download"></i>
                                                    آپلود
                                                </a>
                                            </div>
                                        </div>
                                    </div>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="row">
                <div id="recent-transactions" class="col-xl-12 col-12">
                    <div class="card">
                        <div class="card-header">
                            <div class="row">
                                <div class="col-md">
                                    <div class="row justify-content-between align-items-center mr-md-1 mb-1">
                                        <div class="col-sm">
                                            <h4 class="card-title mb-2 mb-sm-0">فهرست کاربران</h4>
                                        </div>
                                    </div>
                                </div>
                                <div class="col-auto">
                                    <a href="{!! route('admin::users.create') !!}" class="btn btn-info">
                                        <i class="la la-plus"></i>
                                        ایجاد کاربر جدید
                                    </a>
                                </div>

                            </div>
                        </div>
                        <div class="card-content">
                            @if( $users->count() > 0 )
                                @includeWhen( Module::find('notification') && request()->has('search'), 'user::admin.users._notification' )
                                <div class="table-responsive">
                                    <table id="recent-orders" class="table table-hover table-xl mb-0">
                                        <thead>
                                        <tr>
                                            <th class="border-top-0"># شناسه</th>
                                            <th class="border-top-0">نام و نام خانوادگی</th>
                                            <th class="border-top-0">موبایل</th>
                                            {{--                      <th class="border-top-0">ایمیل</th>--}}
                                            <th class="border-top-0">کد ملی</th>
                                            <th class="border-top-0">مدیر</th>
                                            <th class="border-top-0">وضعیت</th>
                                            <th class="border-top-0">ویژه</th>
                                            <th class="border-top-0">آخرین ورود</th>
                                            <th class="border-top-0">عملیات</th>
                                        </tr>
                                        </thead>
                                        <tbody>
                                        @foreach($users as $user)
                                            <tr>
                                                <td class="text-truncate">
                                                    <i class="la la-dot-circle-o success font-medium-1 mr-1"></i>
                                                    {{ $user->id }}
                                                </td>
                                                <td class="text-wrap">
                                                    {{ $user->first_name.' '.$user->last_name }}
                                                </td>
                                                <td class="text-wrap">
                                                    {{ $user->mobile }}
                                                </td>
                                                {{--<td class="text-wrap">
                                                  {{ $user->email }}
                                                </td>--}}
                                                <td class="text-wrap">
                                                    {{ $user->national_id }}
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->is_admin )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( !$user->disabled_at )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->is_special_user == 1 )
                                                        <i class="ft-check-circle text-success"></i>
                                                    @else
                                                        <i class="ft-x-circle text-danger"></i>
                                                    @endif
                                                </td>
                                                <td class="text-wrap">
                                                    @if( $user->last_login_at )
                                                        {{ getShamsiDate($user->last_login_at) }}
                                                    @else
                                                        —
                                                    @endif
                                                </td>
                                                <td>
                                                    <div class="row flex-nowrap">
                                                        <a href="{{ route('admin::users.show', $user) }}" class="mr-1">
                                                            <i class="ft-eye text-grey text-shadow-custom font-medium-5 font-weight-normal"></i>
                                                        </a>
                                                        <a href="{{ route('admin::users.edit', $user) }}" class="mr-1">
                                                            <i class="ft-edit text-grey text-shadow-custom font-medium-4 font-weight-normal"></i>
                                                        </a>

                                                        <form action="{{ route('admin::users.destroy', $user) }}"
                                                              method="post"
                                                              @submit.prevent="confirmDelete">
                                                            @method('delete')
                                                            @csrf
                                                            <button type="submit" class="btn btn-default p-0">
                                                                <i class="ft-trash-2 text-grey font-medium-5 font-weight-normal"></i>
                                                            </button>
                                                        </form>
                                                    </div>
                                                </td>
                                            </tr>
                                        @endforeach
                                        </tbody>
                                    </table>
                                    <div class="pagination-flat">
                                        {{ $users->links() }}
                                    </div>
                                </div>
                            @else
                                <div class="text-center my-2">
                                    <p>نتیجه‌ای برای نمایش وجود ندارد.</p>
                                </div>
                            @endif
                        </div>
                    </div>
                </div>
            </div>
        </section>
    </div>
@endsection

I get this error

error

The export submit button is sending everything to Excel. How do I make it to send only the filtered data. Thanks

6
  • Is there anyone who can answer my question? Commented Jan 9, 2021 at 5:22
  • that data is in form of Table which one you want to export excel? Commented Jan 9, 2021 at 5:42
  • I updated my post and add index.blade.php Commented Jan 9, 2021 at 5:52
  • Is this question solved? Because I see a possible duplicate. Commented Jan 9, 2021 at 12:47
  • No. Unresolved. Please answer this question ...stackoverflow.com/questions/65640741/… Commented Jan 9, 2021 at 12:50

1 Answer 1

3

You need to get rid of the other HTML in your view such as forms, inputs, and buttons. Keep the view only to a minimum of the table that needed for your Excel.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.