Kyslik / column-sortable

Package for handling column sorting in Laravel 5/6/7/8
MIT License
644 stars 105 forks source link

sort relation column #213

Closed mohanadjalal closed 1 year ago

mohanadjalal commented 1 year ago

image

I got this error when I tried to sort a belongsTo relation :

relation method

  public function model()  
    {
        return $this->belongsTo(BrandModel::class, 'brand_model_id', 'id');
    }

inverse relation :

public function repaired()
    {
        return $this->hasOne(RepairedDevice::class);

    }

in index

<th class="text-center text-primary">@sortablelink('model.name', __('repaired.model')) </th>

Maha-Mohammad commented 1 year ago

can you show me your controller please ?

mohanadjalal commented 1 year ago

public function index(Request $request) { $rowPerPage = [5, 10, 15, 20, 25]; $searchText = $request->query('search'); $per_page = 25; $repairedQuery = RepairedDevice::query(); if ($searchText) { $repairedQuery->whereHas('customer', function ($query) { $query->where('customers.full_name', 'like', '%' . request('search') . '%'); })->orWhereHas('employee', function ($query) { $query->where('employees.first_name', 'like', '%' . request('search') . '%'); })->orWhere('imei', 'like', '%' . $searchText . '%') ->orWhereHas('model', function ($query) use ($searchText) { $query->where('brand_models.name', 'like', '%' . $searchText . '%')->orWhereHas('brand', function ($q) use ($searchText) { $q->where('brands.name', 'like', '%' . $searchText . '%'); });; }); }

if ($request->status) { 
    $repairedQuery->where('status' , $request->status);
}

$sortColumn = $request->query('sort', 'created_at');
$sortDirection = $request->query('direction', 'desc');

$repairedQuery->orderBy($sortColumn, $sortDirection);
if ($request->pagination)
    $per_page = $request->pagination;
$repairedDevices = $repairedQuery->sortable()->paginate($per_page)->withQueryString();
$count = $repairedDevices->count();
return view('repaired.index', compact('repairedDevices', 'count', 'rowPerPage'));

}

Maha-Mohammad commented 1 year ago

you can not sort two times try to remove this code $sortColumn = $request->query('sort', 'created_at'); $sortDirection = $request->query('direction', 'desc');

$repairedQuery->orderBy($sortColumn, $sortDirection);