mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-07-28 23:17:58 -04:00
47 lines
1.5 KiB
PHP
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()
|
|
);
|
|
}
|
|
}
|