为了提高效率,我一直在努力解决这个问题。从逻辑上讲,这应该可行。但是,一旦我调用 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
如您所见,在 $male
和 $female
中调用 $query
变量在逻辑上应该是可行的。但我只得到第一次调用的结果,似乎一旦调用 count()
或 get()
,$query
变量不再执行任何其他操作。
我还尝试将 $query
存储到这两个集合的两个不同变量中,但结果相同。
有什么建议吗?
我可以做同样的事情两次,但效率很低(我认为)。
提前致谢!
最佳答案
克隆
它应该可以工作。否则,您将始终在同一个构建器实例上进行操作。
$maleQuery = clone $query;
$femaleQuery = clone $query;
$male = $maleQuery->where('m.gender','male')->get();
$female = $femaleQuery->where('m.gender','female')->get();
关于Laravel:多次使用不同位置的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431566/