Laravel:多次查询同一个table

Laravel: Query on the same table multiple times

我有 table 个用户

+-------+------+-----+
| User  | Sale | Sex |
+-------+------+-----+
| user1 |  120 | M   |
| user2 |   98 | M   |
| user3 |    5 | F   |
+-------+------+-----+

在laravel中,我们通过以下语句查询:

$allMale = UserTable::where('Sex', 'M')->get();

我尝试再次查询相同的 table

会发生什么
 $allFemales = UserTable::where('Sex', 'F')->get();
 $user1 = UserTable::where('User', 'user1')->get();

会查询3次吗?是否可以查询一次然后多次解析?

是的,我不确定这里的 UserTable 是 Builder 还是 Eloquent,但 Eloquet 正在使用 MySQL 所以它会 运行 3 个不同的查询:

SELECT * FROM users WHERE Sex = 'M';
SELECT * FROM users WHERE Sex = 'F';
SELECT * FROM users WHERE User = 'user1';

当然你可以这样做:

$users = UserTable::where(function($q) {
  $q->whereIn('Sex', ['M', 'F'])->orWhere('User', 'user1')
})->get();

这将生成查询:

SELECT * FROM users WHERE ((Sex IN ('M', 'F') OR USER = 'user1'))

现在您可以使用 Laravel collection methods:

从这样的变量中获取这些用户
$allMale = $users->where('Sex', 'M')->get();
$allFemales = $users->where('Sex', 'F')->get();
$user1 = $users->where('User', 'user1')->get();

现在,假设 user1 设置了性别,您实际上可以使用:

$users = UserTable::whereIn('Sex', ['M', 'F'])->get();

此外,假设只有一个 user1 而不是:

$user1 = $users->where('User', 'user1')->get();

可能更好的解决方案是:

$user1 = $users->where('User', 'user1')->first();