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();
我有 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();