Closed jonjieviduya closed 1 month ago
I am trying to add 3 filters (Status, From, To). How can I do that using the Yajra\DataTables\Services\DataTable class?
Yajra\DataTables\Services\DataTable
<?php namespace App\DataTables\Payments; use App\Models\Order; use App\Models\Payment; use Yajra\DataTables\Html\Button; use Yajra\DataTables\Html\Column; use Yajra\DataTables\Services\DataTable; class BankTransferDataTable extends DataTable { protected $exportColumns = [ 'id', 'order_id', 'order_number', 'invoice_number', 'bulk_order_key', 'add_on', 'email', 'mobile_number', 'g_bank', 'bank_name', 'account_name', 'account_number', 'payment_date', 'amount', 'deposit_slip', 'status', 'transaction_id', 'created_at', 'updated_at', 'phone', 'order_status', 'order_total' ]; public function dataTable($query) { return datatables() ->eloquent($query) // ->filter(function ($query) { // if (request()->has('search')) { // $query->where(function($query) { // $query->where('categories.name', 'LIKE', '%' . request('search')['value'] . '%') // ->orWhere('categories.slug', 'LIKE', '%' . request('search')['value'] . '%'); // }); // } // }) ->addColumn('Order #', function ($payment) { return $payment->bulk_order_key; }) ->addColumn('Gifted Account', function ($payment) { return $payment->g_bank; }) ->addColumn('Bank Name', function ($payment) { return $payment->bank_name; }) ->addColumn('Account Name', function ($payment) { return $payment->account_name; }) ->addColumn('Status', function ($payment) { if ($payment->transaction_id) { return $payment->get_wallet_transaction_status(); } else if($payment->bulk_order_key) { $orderStatus = Order::select(['status']) ->where('bulk_order_key', $payment->bulk_order_key) ->first(); if ($orderStatus) { return $orderStatus->status; } } return $payment->order_status; }); // ->addColumn('Actions', function ($category) { // return view('backend.catalog.categories.action', compact('category')); // }); } /** * Get query source of dataTable. * * @param \App\Payment $model * @return \Illuminate\Database\Eloquent\Builder */ public function query(Payment $model) { $filters = request()->has('search.value') && filled(request('search.value')) ? json_decode(request('search.value'), true)['filters'] : []; return $model->newQuery() ->selectRaw('payments.*, orders.phone, orders.status as order_status, orders.total as order_total') ->leftJoin('orders', 'payments.order_id', '=', 'orders.id') ->whereRaw('payments.bulk_order_key <> ""'); if (filled($filters['status'])) { $query->where('payments.status', $filters['status']); } $query->when((request()->has('from') && request()->has('to')), function ($query) { $query->whereDate('payments.created_at', '>=', request()->get('from')); $query->whereDate('payments.created_at', '<=', request()->get('to')); }) ->when((request()->has('from')), function ($query) { $query->whereDate('payments.created_at', '>=', request()->get('from')); $query->whereDate('payments.created_at', '<=', date('Y-m-d', strtotime('today'))); }) ->when((request()->has('to')), function ($query) { $query->whereDate('payments.created_at', '>=', date('Y-m-d', strtotime('-5 years'))); $query->whereDate('payments.created_at', '<=', request()->get('to')); }) ->orderBy('payments.created_at', 'desc'); } /** * Optional method if you want to use html builder. * * @return \Yajra\DataTables\Html\Builder */ public function html() { return $this->builder() ->setTableId('bankTransferPaymentsTable') ->columns($this->getColumns()) ->minifiedAjax() ->dom('Brtip') ->orderBy(1) ->buttons( Button::make('export')->buttons(['csv']), Button::make('reset') ->text('<span><i class="fa fa-undo"></i> Refresh</span>'), ); } /** * Get columns. * * @return array */ protected function getColumns() { return [ Column::make('Order #'), Column::make('Gifted Account'), Column::make('Bank Name'), Column::make('Status'), // Column::make('Actions') ]; } /** * Get filename for export. * * @return string */ protected function filename() { return 'bank_transfer_payments_report_' . date('YmdHis'); } }
And for the view, I am using:
{{ $dataTable->scripts() }}
Summary of problem or feature request
I am trying to add 3 filters (Status, From, To). How can I do that using the
Yajra\DataTables\Services\DataTable
class?Code snippet of problem
And for the view, I am using:
Filters screenshot
System details