为了提高效率,我一直在努力解决这个问题。从逻辑上讲,这应该有效。但是,一旦我调用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
正如您所看到的,在$query
和$male
中调用$female
变量应该在逻辑上有效。但我只收到第一个调用的结果,似乎调用count()
或get()
后,$query
变量不再执行任何其他操作。
我还尝试将$query
存储到这两个集合的两个不同变量中,但结果相同。
有什么建议吗?
我可以两次做同样的事情,但效率很低(我认为)。
提前致谢!
答案 0 :(得分:10)
{{1}它应该有效。否则,您将始终在同一个构建器实例上运行。
clone
答案 1 :(得分:1)
所有关于那些wheres
而不是get
或count
- 基本上你的最后一次尝试都有where m.gender = male AND m.gender = female
,所以它逻辑上不应该是$query
。工作工作,但没有。
另请注意,将$varOne
存储在2个变量中不会产生任何效果,因为对象是通过引用传递的,所以尽管在$varTwo
和$query = Address::query();
// add your clauses
$male = $query;
$female = $query;
$male === $female; // true
// but
$male = $query;
$female = clone $query;
$male === $female; // false - 2 different objects
// now you can add last where
$males = $male->where('m.gender', 'male')->get();
$females = $female->where('m.gender', 'female')->get();
上运行,您仍然使用同一个对象:
clone
在使用where('m.gender..)
之前只需{{1}}查询,您就可以了。