Laravel:使用不同的Wheres多次查询

You*_* K. 7 laravel eloquent laravel-4

为了提高效率,我一直在努力解决这个问题.从逻辑上讲,这应该有效.但是,一旦我调用count()或get(),第二次使用就不起作用了.如果您看到以下代码,那么您将会清楚:

$query = Address::where('area_id',$area->id);
if($order === 'house_no')
    $query->orderBy('house_no','ASC');
$query->join('members as m','addresses.member_id','=','m.id');
if($order === 'reg')
    $query->orderBy('batch','ASC')->orderBy('reg','ASC');
if($types != '')
    $query->whereIn('m.type', explode(',', $types));

$male = $query->where('m.gender','male')->get();
$female = $query->where('m.gender','female')->get(); //this does not work
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,$query在两者中调用变量$male并且$female应该在逻辑上工作.但我只得到了第一次调用的结果,似乎一旦count()get()被调用时,$query变量将不再做别的了.

我也尝试$query为这两个集合存储两个不同的变量,但结果相同.

有什么建议?

我可以两次做同样的事情,但效率低下(我认为).

提前致谢!

luk*_*ter 11

clone它应该工作.否则,您始终在同一个构建器实例上运行.

$maleQuery = clone $query;
$femaleQuery = clone $query;

$male = $maleQuery->where('m.gender','male')->get();
$female = $femaleQuery->where('m.gender','female')->get();
Run Code Online (Sandbox Code Playgroud)

  • 除了Lukas的答案 - 即使你缓冲查询 - 主要的'努力'是SQL调用本身 - 你必须运行两次.没有其他办法了. (2认同)