Files
wticreatorstudio/Modules/StudioPlus/Traits/ScopeTrait.php
T
2024-02-12 22:54:20 -05:00

47 lines
1.5 KiB
PHP

<?php
namespace Modules\StudioPlus\Traits;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
trait ScopeTrait
{
public function scopeGetOrPaginate(Builder $query, $perPage = 15)
{
return $perPage === 'all'
? $query->get()
: $query->paginate($perPage);
}
public function scopeFilter(Builder $query, Request $request, array $searchables = []): Builder
{
$searchables = $this->searchables ?: $searchables;
return $query
->when($request->filled('search'), function ($query) use ($searchables, $request) {
$query->where(function ($query) use ($searchables, $request) {
foreach ($searchables as $key => $field) {
if ($key === 0) {
$query->where($field, 'LIKE', "%{$request->search}%");
continue;
}
$query->orWhere($field, 'LIKE', "%{$request->search}%");
}
});
});
}
public function scopeCustomOrderBy(Builder $query, Request $request): Builder
{
return $query
->when(
$request->filled('orderBy') && $request->filled('sortBy'),
fn ($query) => $query->orderBy($request->orderBy, $request->sortBy),
fn ($query) => $query->latest()
);
}
}