2014-12-23 60 views
9

是否可以克隆查詢字符串,這樣我就可以編寫一次,並且可以在不影響其他結果的情況下進行長時間的修改?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.*')); 

因爲現在,分頁會改變第一個get()。

感謝

回答

3

Mopo922的答案是這樣做的Laravel> = 4.1的正確途徑。但是,在以前的版本中,查詢不會「深層克隆」,並且會產生意想不到的結果,因爲主查詢存儲在子對象Query中,而不是郵件Builder

爲了避免這種錯誤,你可以使用:

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

你可以看到這個bug /上修復的故事:https://github.com/laravel/framework/issues/1336