Laravel:多次使用不同位置的查询

标签 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

如您所见,在 $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/

相关文章:

php - Laravel Carbon 不考虑时区 DST

php - 由 PDOException : SQLSTATE[42000] - php unit test in Laravel 引起

authentication - 不同的名称字段用户表?

mysql - Laravel 5.3 列中的两个唯一值

html - 如何将 'boolean'类型的数据从HTML表单发送到数据库

Laravel - 从请求中过滤掉 'null' 值

php - 类型错误:传递给 Illuminate\Database\Eloquent\Builder::create() 的参数 1 必须是数组类型,给定为 null

mysql - Eloquent Join,多个where查询,把AND改成OR

php - Laravel 5.5 querybuilder 从数组集合插入表

php - 使用 PHP 框架 Laravel 4 在数据库中创建表