2014-12-23 12 views
9

Có thể sao chép chuỗi truy vấn để tôi có thể viết một lần và thực hiện thay đổi một cách lâu dài mà không có kết quả khác không?Chuỗi truy vấn nhân bản 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.*')); 

Bởi vì ngay bây giờ, phân trang sẽ thay đổi get() đầu tiên.

Cảm ơn

Trả lời

3

Mopo922 câu trả lời là đúng cách để làm điều này trên Laravel> = 4.1. Tuy nhiên, trong các phiên bản trước, truy vấn không "sao chép sâu" và sẽ tạo ra kết quả không mong muốn, vì truy vấn chính được lưu trữ trong đối tượng con Query, không phải trong thư Builder.

Để tránh lỗi này, bạn có thể sử dụng:

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

Bạn có thể thấy lỗi này/sửa chữa câu chuyện trên: https://github.com/laravel/framework/issues/1336

Các vấn đề liên quan