Files
ai-stylegallery/app/Filament/Resources/PluginResource/CollectionEloquentBuilder.php

74 lines
2.1 KiB
PHP

<?php
namespace App\Filament\Resources\PluginResource;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
class CollectionEloquentBuilder extends Builder
{
protected $collection;
public function __construct($query)
{
parent::__construct($query);
$this->collection = new Collection(); // Initialize with an empty collection
}
public function setCollection(Collection $collection)
{
$this->collection = $collection;
return $this;
}
public function get($columns = ['*'])
{
return $this->collection;
}
public function find($id, $columns = ['*'])
{
return $this->collection->firstWhere('id', $id);
}
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null, $total = null)
{
$page = $page ?: Paginator::resolveCurrentPage($pageName);
$results = $this->collection->slice(($page - 1) * $perPage, $perPage)->all();
return new LengthAwarePaginator($results, $this->collection->count(), $perPage, $page, [
'path' => Paginator::resolveCurrentPath(),
'pageName' => $pageName,
]);
}
public function count($columns = '*')
{
return $this->collection->count();
}
public function where($column, $operator = null, $value = null, $boolean = 'and')
{
if (func_num_args() === 2) {
[$value, $operator] = [$operator, '='];
}
if ($operator === '=') {
$this->collection = $this->collection->where($column, $value);
} else {
// For simplicity, only handling '=' operator for now. More complex operators would require more logic.
// For example, for 'like', you'd need to implement string matching.
}
return $this;
}
public function orderBy($column, $direction = 'asc')
{
$this->collection = $this->collection->sortBy($column, SORT_REGULAR, $direction === 'desc');
return $this;
}
}