Laravel克隆查询字符串

时间:2014-12-23 17:42:36

标签: php 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()。

由于

2 个答案:

答案 0 :(得分:12)

你的词汇表完全正确:)在PHP5 +中,尝试克隆:

<?php
$queryGet = clone $query;
$queryPaginate = clone $query;
$queryCount = clone $query;

http://php.net/manual/en/language.oop5.cloning.php

答案 1 :(得分:3)

Mopo922答案是在Laravel&gt; = 4.1上执行此操作的正确方法。但是,在以前的版本中,查询不会深度克隆&#34;并会产生意外结果,因为主查询存储在子Query对象中,而不是存储在邮件中{ {1}}。

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

Builder

您可以在https://github.com/laravel/framework/issues/1336

上看到此错误/修复故事