Php Laravel克隆查询字符串

Php Laravel克隆查询字符串,php,laravel,Php,Laravel,是否可以克隆一个查询字符串,这样我就可以编写一次,并在不影响其他结果的情况下进行长时间的修改 $query = DB::table('users') ->where('id', '=', '123'); $queryGet = $query; $queryPaginate = $query; $queryCount = $query; if(Input::has('get')) $queryGet = $queryGet->get(); if(Input:

是否可以克隆一个查询字符串,这样我就可以编写一次,并在不影响其他结果的情况下进行长时间的修改

$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
对象中,而不是存储在mail
Builder

要避免此错误,您可以使用:

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

您可以在上看到这个bug/fix故事:

另外:在新的PHP版本中,您还可以直接使用克隆的查询对象,而不必存储中间状态。例如:
$queryPaginate=(clone$query)->paginate(25)