2014-12-23 10 views
9

Czy można sklonować ciąg kwerendy, aby móc go napisać raz i dokonać zmian na długo, bez uszczerbku dla innych wyników?Łańcuch zapytania klonowania Laravel

$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.*')); 

Ponieważ teraz, paginacja zmieni pierwsze pobranie().

Dzięki

Odpowiedz

3

Mopo922 odpowiedź jest właściwym sposobem, aby to zrobić na laravel> = 4.1. Jednak w poprzednich wersjach zapytanie nie "głęboko klonowało" i dawałoby nieoczekiwane wyniki, ponieważ zapytanie główne jest przechowywane w obiekcie podrzędnym Query, a nie w mailu Builder.

Aby uniknąć tego błędu, można użyć:

$newClone = new \Illuminate\Database\Eloquent\Builder(clone $builder->getQuery()); 

Można zobaczyć ten błąd/naprawić historię na: https://github.com/laravel/framework/issues/1336

Powiązane problemy