Laravel :: all () альтернатива, которая возвращает объект Builder - PullRequest
0 голосов
/ 18 мая 2018

У меня есть модели определенного класса, которые я хотел бы отфильтровать, передав объект 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;
}

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я не уверен насчет ваших требований, но вы можете попробовать макросы laravel

Builder::macro(
            'customAll',
            function (App\Entity\Filter $filter) {
                $rules  = $filter->rules;
                $groups = $this->_prepare_groups($rules);
                return $this->_parse_groups($query, $groups);

            }
        );
0 голосов
/ 18 мая 2018

Вы можете на самом деле позвонить ::query() статически для достижения этих результатов.Это также может быть полезно в качестве замены \DB::table('models'), если для ваших нужд Eloquent\Builder является взаимозаменяемым или предпочтительнее, чем Query\Builder, который возвращается \DB::table().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...