Ответ 1
У вас был правильный словарный запас :) В PHP5+ попробуйте клонирование:
<?php
$queryGet = clone $query;
$queryPaginate = clone $query;
$queryCount = clone $query;
Можно ли клонировать строку запроса, чтобы я мог написать ее один раз и внести изменения в долгий путь без привязки других результатов?
$query = DB::table('users')
->where('id', '=', '123');
$queryGet = $query;
$queryPaginate = $query;
$queryCount = $query;
if(Input::has('get'))
$queryGet = $queryGet->get();
if(Input::has('paginate'))
$queryPaginate = $queryPaginate->paginate(25);
if(Input::has('count'))
$queryCount = $queryCount->count(DB::raw('Distinct users.*'));
Потому что прямо сейчас, paginate изменит первый get().
благодаря
У вас был правильный словарный запас :) В PHP5+ попробуйте клонирование:
<?php
$queryGet = clone $query;
$queryPaginate = clone $query;
$queryCount = clone $query;
Ответ Mopo922 - это правильный способ сделать это на Laravel> = 4.1. Но в предыдущих версиях запрос не был "глубоким клоном" и приводил к неожиданным результатам, поскольку основной запрос хранится в дочернем объекте Query
, а не в почтовом Builder
.
Чтобы избежать этой ошибки, вы можете использовать:
$newClone = new \Illuminate\Database\Eloquent\Builder(clone $builder->getQuery());
Вы можете увидеть эту историю ошибок/исправлений на странице: https://github.com/laravel/framework/issues/1336