У меня есть модели определенного класса, которые я хотел бы отфильтровать, передав объект Filter с условиями в метод, который его анализирует, и связал where
s различных типов, в конце концов возвращая только модели, соответствующиефильтр.
Для этого я хочу найти метод, который эквивалентен вызову :: all (), но возвращает Eloquent\Builder
экземпляр вместо Collection
.
// Returns Collection
App\Entity\Post::all();
// Returns Eloquent\Builder
App\Entity\Post::query();
// Returns Query\Builder
\DB::table('posts');
/**
* This method allows you to make complex Eloquent queries based on an existing one.
*
* @param Eloquent\Builder $query
* @param App\Entity\Filter $filter
* @return Eloquent\Builder
*/
function parse_filter(Eloquent\Builder &$query, App\Entity\Filter $filter)
{
$rules = $filter->rules;
$groups = $this->_prepare_groups($rules);
return $this->_parse_groups($query, $groups);
}
/**
* @param Eloquent\Builder $query
* @param array $groups
* @return Eloquent\Builder
*/
function _parse_groups(Eloquent\Builder &$query, array $groups)
{
foreach ($groups as $key => $group) {
// chain with previous conditions
// make Closures using group data
// run Closures on Query I have so far
}
return $query;
}