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

时间:2015-02-10 12:20:55

标签: laravel laravel-4 eloquent

为了提高效率,我一直在努力解决这个问题。从逻辑上讲,这应该有效。但是,一旦我调用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存储到这两个集合的两个不同变量中,但结果相同。

有什么建议吗?

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

提前致谢!

2 个答案:

答案 0 :(得分:10)

{{1}它应该有效。否则,您将始终在同一个构建器实例上运行。

clone

答案 1 :(得分:1)

所有关于那些wheres而不是getcount - 基本上你的最后一次尝试都有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}}查询,您就可以了。