اذهب إلى المحتوى

السؤال

نشر

كما تعلمون انه عند استخدام yajra datatables يتم جلب جميع البيانات بشكل تلقائي

SELECT(*)

أنا فقط أريد جلب البيانات ضمن طريقة معينة.. كإستخدام where مثلا وليس كل البيانات.

يعني أريد عمل شرط بناء عليه يتم جلب البيانات وعرضها بyajra datatables احدث اصدار

الexpenses data table file

<?php

namespace App\DataTables;

use App\Models\Admin\Expenses;
use Yajra\DataTables\Html\Button;
use Yajra\DataTables\Html\Column;
use Yajra\DataTables\Html\Editor\Editor;
use Yajra\DataTables\Html\Editor\Fields;
use Yajra\DataTables\Services\DataTable;

class ExpensesDataTable extends DataTable
{
    private $monthData;

    public function setMonth ($month)
    {
        $this->monthData = $month;
    }

    /**
     * Build DataTable class.
     *
     * @param mixed $query Results from query() method.
     * @return \Yajra\DataTables\DataTableAbstract
     */
    public function dataTable($query)
    {
        return datatables()
            ->eloquent($query)
            ->editColumn('student_id', function ($item) {
                return $item->student->name;
            })
            ->editColumn('level_id', function ($item) {
                return $item->student->level->name_ar;
            })
            ->editColumn('created_at', function ($item) {
                return date('Y-m-d H:i', strtotime($item->created_at));
            })
            ->editColumn('user_id', function ($item) {
                return $item->user->name;
            })
            ->addColumn('action', function ($item) {
                if($item->trashed()){
                    $html = '<i title="حذف نهائياً" class="fas fa-trash text-danger"></i> &nbsp;<i title="إستعادة" class="fas fa-trash-restore text-success"></i>';
                }else{
                    $html = '<i title="حذف" class="fas fa-trash text-danger"></i>&nbsp;<i class="cursor-pointer fas fa-print text-primary"></i>';
                }

                return $html;
            });
    }

    /**
     * Get query source of dataTable.
     *
     * @param \App\Models\Expense $model
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function query(Expenses $model)
    {
        return $model->newQuery();
    }

    /**
     * Optional method if you want to use html builder.
     *
     * @return \Yajra\DataTables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
                    ->setTableId('expenses-table')
                    ->columns($this->getColumns())
                    ->minifiedAjax()
                    ->dom('Bfrtip')
                    ->orderBy(1)
                    ->lengthMenu([50])
                    ->language(['url' => route('dataTableTranslation')])
                    ->buttons(
                        Button::make('excel'),
                        Button::make('print'),
                    );
    }

    /**
     * Get columns.
     *
     * @return array
     */
    protected function getColumns()
    {
        return [
            Column::make('id')->title('#ID'),
            Column::make('student_id')->title('الطالب'),
            Column::make('level_id')
            ->searchable(false)
            ->title('المرحلة'),
            Column::make('month')->title('الشهر'),
            Column::make('money')->title('المبلغ'),
            Column::make('created_at')->title('تاريخ العملية'),
            Column::make('user_id')->title('المستلم'),
            Column::computed('action')
                  ->title('خيارات')
                  ->exportable(false)
                  ->printable(false)
                  ->searchable(false)
                  ->width(60)
        ];
    }

    /**
     * Get filename for export.
     *
     * @return string
     */
    protected function filename()
    {
        return 'Expenses_' . date('YmdHis');
    }
}

الcontroller

public function index(Request $request, ExpensesDataTable $table)
{
	if(!empty($request->month) && is_numeric($request->month)){
		if($request->month > 12 || $request->month < 0){
			abort(404);
		}else{
			$table->setMonth($request->month);
  		}
  	}else{
  		$table->setMonth(date('m'));
  	}

  	return $table->render('admin.expenses.index');
}

يعني أريد تمرير بيانات إلى الدالة setMonth الموجودة بداخل ملف الexpensesDataTable وبناء عليه أستخدم الmonth المُمرر في جلب بياناتي.. هل من حل؟ 

وشكرا

Recommended Posts

  • 0
نشر

يُمكنك من خلال التابع eloquent تكوين الإستعلام الذي تُريد و تمريره له 

<?php

public function dataTable($query)
{
  $query = User::query()->where(function ($q) {
    if (request()->has('level')) {
      return $q->where('level', request('level'));
    }
  });
  return datatables()
    ->eloquent($query)
    ...
}

أو يُمكنك القيام بذلك في الميثود query من صنف Datatable لأنه تم توفيرها لإنشاء و التحكم في الإستعلام كما تشاء:

<?php

public function query()
{
  return User::query()->where(function ($q) {
    if (request()->has('level')) {
      return $q->where('level', request('level'));
    }
  });
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...